2016-08-22 8 views
2

Цель состоит в том, чтобы распознать жесты пинча только в том случае, если кастрюля с двумя пальцами не выполняется.iOS: распознать жесты пинча, но не две палочки для пальцев?

Этот код допускает как pinchGesture, так и два пальца panGestures, но они встречаются одновременно. Это было основано на this answer для использования функции gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWithGestureRecognizer: UIGestureRecognizer).

// Handle two-finger pans 
    let twoFingerPanRecognizer = UIPanGestureRecognizer(target: self, action: #selector(sceneViewPannedTwoFingers)) 
    twoFingerPanRecognizer.minimumNumberOfTouches = 2 
    twoFingerPanRecognizer.maximumNumberOfTouches = 2 
    twoFingerPanRecognizer.delegate = self 
    sceneView.addGestureRecognizer(twoFingerPanRecognizer) 

    // Handle pinches 
    let pinchGesture = UIPinchGestureRecognizer(target: self, action: #selector(sceneViewPinched)) 
    pinchGesture.delegate = self 
    sceneView.addGestureRecognizer(pinchGesture) 

    func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWithGestureRecognizer: UIGestureRecognizer) -> Bool { 
     if gestureRecognizer is UIPinchGestureRecognizer { 
      return false 
     } else { 
      return true 
     } 
    } 

Этот код позволяет скобы с двумя пальцами, но щипцы вообще не работают.

// Handle two-finger pans 
    let twoFingerPanRecognizer = UIPanGestureRecognizer(target: self, action: #selector(sceneViewPannedTwoFingers)) 
    twoFingerPanRecognizer.minimumNumberOfTouches = 2 
    twoFingerPanRecognizer.maximumNumberOfTouches = 2 
    twoFingerPanRecognizer.delegate = self 
    sceneView.addGestureRecognizer(twoFingerPanRecognizer) 

    // Handle taps 
    let tapRecognizer = UITapGestureRecognizer(target: self, action: #selector(sceneViewTapped)) 
    sceneView.addGestureRecognizer(tapRecognizer) 

    // Handle pinches 
    let pinchGesture = UIPinchGestureRecognizer(target: self, action: #selector(sceneViewPinched)) 
    pinchGesture.delegate = self 
    pinchGesture.requireGestureRecognizerToFail(twoFingerPanRecognizer) 
    sceneView.addGestureRecognizer(pinchGesture) 

    func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWithGestureRecognizer: UIGestureRecognizer) -> Bool { 
     return true 
    } 
+0

Вы хотите установить только один пинч жест распознаватель? – user3182143

+0

@ пользователь3182143 уверенный. благодаря! – Crashalot

+0

вы хотите выполнить только один жест за раз? либо щепотку, либо сковородку? –

ответ

3

Вы попробуйте, как этот

func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWithGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool { 
    if ((gestureRecognizer is UIPinchGestureRecognizer || gestureRecognizer is UIPanGestureRecognizer) 
     && (otherGestureRecognizer is UIPinchGestureRecognizer || otherGestureRecognizer is UIPanGestureRecognizer)) { 
     return false 
    } 
    return true 
} 
+0

Не работает. Двух пальцевые сковородки работают, но щипцы вообще не работают. – Crashalot

+0

Удалили ли вы эту строку 'requireGestureRecognizerToFail', попробуйте мой ответ после удаления строки. –

+0

okay попробует это – Crashalot