私のアプリケーションでは、ページ付き水平スクロールビューが使用されます。各ページにはユーザーがタップできるUIControlsがあります。UIPanGestureRecognizerでの重複したUIScrollViewのキャンセル動作
UIScrollViewは、タッチやスワイプのキャンセルを処理するのに適しています。ユーザーが十分速くスワイプし始めると、スワイプします。ユーザーが強調表示された状態を有効にするのに十分な長さでタッチダウンすると、スクロールビューはスワイプしません。
私はスクロールビュー内の下向きスワイプに応答できるように、この動作をUIPanGestureRecognizerサブクラスで複製しようとしています。しかし、UIControlsが強調表示された場合には、取り消すジェスチャーを得ることはできません。
これまでのところ、私は次のことをやった:
self.refreshGesture.cancelsTouchesInView = YES;
self.refreshGesture.delaysTouchesBegan = NO;
self.refreshGesture.delaysTouchesEnded = NO;
これはUIScrollViewのはへの見解に触れるが、それはUIScrollViewののパンジェスチャー認識がキャンセルされることを方法と重複しない渡す方法を複製するようです。 self.refreshGesture
は、ユーザーがどれくらいゆっくりとスワイプしても、またはUIControlsの状態が何であっても常に起動されます。
私のジェスチャーでデリゲートを設定しようとしましたが、これは行く方法かもしれません。しかし、私はうまくいく組み合わせを見つけていない。たとえば、UIControl内でタッチが開始するかどうかをチェックするだけで、あまりにも頻繁にキャンセルされます。私はまた、私のコントロールでgestureRecognizerShouldBegin
をオーバーライドしようとしましたが、これはハックのように思えますし、(UITextViewのジェスチャーを妨害するなど)遠い意味合いがあります。
このGIFでは、コントロールがタッチでアクティブになっていることがわかります。その場合、スクロールビューはスクロールをキャンセルします。しかし、私の下向きのパンジェスチャは同じようにキャンセルされない: