44

縦スクロールがありUIScrollViewます。デフォルトの垂直スクロール動作を許可しながら、水平パンも処理したいと考えています。スクロール ビューを透明UIViewにし、パン ジェスチャ レコグナイザーを追加しました。このようにして、パンをうまく取得できますが、スクロールビューはジェスチャを受け取りません。

UIPanGestureRecognizerDelegateジェスチャ認識エンジンを水平パンのみに制限することを期待して、次のメソッドを実装しましたが、それは役に立ちませんでした:

- (BOOL)gestureRecognizerShouldBegin:(UIPanGestureRecognizer *)gestureRecognizer {
    // Only accept horizontal pans here.
    // Leave the vertical pans for scrolling the content.
    CGPoint translation = [gestureRecognizer translationInView:self.view];
    BOOL isHorizontalPan = (fabsf(translation.x) > fabsf(translation.y));
    return  isHorizontalPan;
}

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
    return (otherGestureRecognizer == _scrollView.panGestureRecognizer);
}
4

3 に答える 3

53

わかりました。これを機能させるには、次の 2 つのことを行う必要がありました。

1) 独自のパン レコグナイザーをスクロール ビュー自体にアタッチします。その上の別のビューにはアタッチしません。

2) このUIGestureRecognizerDelegateメソッドは、デフォルトのスクロールビューと自分のスクロールビューの両方が同時に呼び出されたときに発生する間抜けな動作を防ぎます。

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
    return YES;
}
于 2012-12-06T03:46:28.977 に答える