1

UIGestureRecognizerタッチを処理するために次のものが大丈夫かどうか疑問に思います:

        if (pinchGestureRecognizer.state == UIGestureRecognizerStateBegan || pinchGestureRecognizer.state == UIGestureRecognizerStateChanged)
        {
            //process touches
        }
        else if (pinchGestureRecognizer.state == UIGestureRecognizerStateEnded)
        {
            //do whatever after gesture recognizer finishes
        }

UIGestureRecognizerStateEnded基本的に、まだプロセスのタッチが発生するのかUIGestureRecognizer、それともその時点ですべてのタッチが終了するのか、疑問に思っています。奇妙な値を取得しているtranslationInViewので、ここで質問したかっただけです。

4

1 に答える 1

1

あなたは尋ねました:

UIGestureRecognizerStateEnded基本的に、まだプロセスのタッチが発生するのかUIGestureRecognizer、それともその時点ですべてのタッチが終了するのか、疑問に思っています。

取得するとUIGestureRecognizerStateEnded、はい、ジェスチャーが完了します。ただし、明らかに、その時点でビューからジェスチャレコグナイザーを削除しない限り、ユーザーが新しいジェスチャを開始すると、ジェスチャ認識プロセスはから最初からやり直しUIGestureRecognizerStateBeganます。

さらに、あなたは言った:

奇妙な値を取得しているtranslationInViewので、ここで質問したかっただけです。

あなたのコードサンプルは、あなたがピンチジェスチャを扱っていることを示唆していますが、それはしませんtranslationInView。そのため、あなたがどのような「奇妙な値」を取得しているかはわかりません。ただし、ジェスチャを設定してdelegate実装することにより、2つのジェスチャを同時に実行できshouldRecognizeSimultaneouslyWithGestureRecognizerます。

- (void)viewDidLoad
{
    [super viewDidLoad];

    UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer alloc] initWithTarget:self
                                                                                action:@selector(handlePinch:)];
    pinch.delegate = self;
    [self.view addGestureRecognizer:pinch];

    UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self
                                                                          action:@selector(handlePan:)];
    pan.delegate = self;
    [self.view addGestureRecognizer:pan];
}

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
    if ([gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]] && [otherGestureRecognizer isKindOfClass:[UIPinchGestureRecognizer class]])
        return YES;
    if ([gestureRecognizer isKindOfClass:[UIPinchGestureRecognizer class]] && [otherGestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]])
        return YES;
    return NO;
}

- (void)handlePinch:(UIPinchGestureRecognizer *)gesture
{
    CGFloat scale = [gesture scale];
    NSLog(@"%s: %@: scale=%.2f", __FUNCTION__, [self stringFromGestureState:gesture.state], scale);
}

- (void)handlePan:(UIPanGestureRecognizer *)gesture
{
    CGPoint translation = [gesture translationInView:gesture.view];
    NSLog(@"%s: %@: translation=%@", __FUNCTION__, [self stringFromGestureState:gesture.state], NSStringFromCGPoint(translation));
}

上記のコードは機能します。ここで、handlePanはパンをhandlePinch返し、はピンチを返し、translationInViewofは例外的にhandlePan見えません。おそらく、ピンチジェスチャをどのように使用して取得しているかを示し、取得translationInViewしている値の何がおかしいのかを教えてください。

于 2013-03-26T08:28:11.997 に答える