私は、特定の種類のワンタッチドラッグを検出するカスタムUIGestureRecognizer
サブクラスを持っています。同じシーンでは、私はUIPinchGestureRecognizer
も持っていて、2本指のピンチを検出します。カスタムUIGestureRecognizerが失敗した後にUIPinchGestureRecognizerが起動しない
この問題は、ピンチジェスチャーを行いながら、一方の指を他方の手前に瞬時に置くと発生します。カスタムジェスチャー認識器はワンタッチで表示され、その状態を「.began
」に設定します。 2回目のタッチが追加されると、カスタムレコグナイザはその状態を通知して.failed
に切り替えます。しかし、それは遅すぎるし、ピンチジェスチャーレコグナイザーはそれを拾いません。私はfalse
へとカスタムジェスチャー認識のためのtrue
にdelaysTouchesBegan
セットでcancelsTouchesInView
セットでそれを試してみた
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent) {
super.touchesBegan(touches, with: event)
guard touches.count == 1 else {
state = .failed
return
}
state = .began
}
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent) {
super.touchesMoved(touches, with: event)
guard touches.count == 1 else {
state = .failed
return
}
// do gesture recognizer stuff here
}
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent) {
super.touchesEnded(touches, with: event)
state = .ended
}
:
はここでカスタムUIGestureRecognizerサブクラス用のコードです。この動作に違いはありませんでした。
UIPinchGestureRecognizer
にUIPanGestureRecognizer
を使用すると、この問題は発生しません。これは意図した動作ではないと思うようになります。
私のUIGestureRecognizerの失敗コードは何の問題がありますか?また、UIPinchGestureRecognizerがタッチを非同時に開始するピンチを認識できるように修正するにはどうすればよいですか?