2017-06-09 31 views
0

私は、特定の種類のワンタッチドラッグを検出するカスタムUIGestureRecognizerサブクラスを持っています。同じシーンでは、私はUIPinchGestureRecognizerも持っていて、2本指のピンチを検出します。カスタムUIGestureRecognizerが失敗した後にUIPinchGestureRecognizerが起動しない

この問題は、ピンチジェスチャーを行いながら、一方の指を他方の手前に瞬時に置くと発生します。カスタムジェスチャー認識器はワンタッチで表示され、その状態を「.began」に設定します。 2回目のタッチが追加されると、カスタムレコグナイザはその状態を通知して.failedに切り替えます。しかし、それは遅すぎるし、ピンチジェスチャーレコグナイザーはそれを拾いません。私はfalseへとカスタムジェスチャー認識のためのtruedelaysTouchesBeganセットで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サブクラス用のコードです。この動作に違いはありませんでした。

UIPinchGestureRecognizerUIPanGestureRecognizerを使用すると、この問題は発生しません。これは意図した動作ではないと思うようになります。

私のUIGestureRecognizerの失敗コードは何の問題がありますか?また、UIPinchGestureRecognizerがタッチを非同時に開始するピンチを認識できるように修正するにはどうすればよいですか?

答えて

0

UIGestureRecognizerDelegateプロトコルを使用してgestureRecognizer(_:shouldRecognizeSimultaneouslyWith:)を実装してみてください。これにより、2つのジェスチャーを同時に認識させることができます。

class MyVC: UITableViewController, UIGestureRecognizerDelegate { 

    override func viewDidLoad() { 
     let pinchGestureRecognizer = UIPinchGestureRecognizer(target: self, action: #selector(handlePinchFrom)) 
     pinchGestureRecognizer.delegate = self 
     view.addGestureRecognizer(pinchGestureRecognizer) 
    } 

    func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool { 
     return true 
    } 
} 
関連する問題