Reputation: 807
I am using spriteKit. I don't kwon whether this is important. I've initialized two UIGestureRecognizer to my view in didMove(toView):
let longPress = UILongPressGestureRecognizer()
longPress.minimumPressDuration = CFTimeInterval(0.0)
longPress.addTarget(self, action: #selector(self.longPressGesture(longpressGest:)))
self.view?.addGestureRecognizer(longPress)
let swipeUp = UISwipeGestureRecognizer()
swipeUp.direction = UISwipeGestureRecognizerDirection.up
swipeUp.addTarget(self, action: #selector(self.swipeUpGesture(swipe:)))
self.view?.addGestureRecognizer(swipeUp)
My Problem is that only the first gestureRecognizer is called (longpressGest). When I delete the first GestureRecognizer, the swipeGestureRecognizer does work. How can I solve this?
Upvotes: 0
Views: 1742
Reputation:
You could also use the same gesture recognizer and differ between the two gesture inside of this function
Upvotes: 0
Reputation: 236350
You need to make your Game Scene view the delegate of your gesture recognizer. You will also need implement its method shouldRecognizeSimultaneouslyWith as mentioned by xmasRights:
So in your Game scene declaration just add UIGestureRecognizerDelegate
:
class GameScene: SKScene, SKPhysicsContactDelegate, UIGestureRecognizerDelegate {
And in your didMove(to view: SKView) method make set its delegate:
let longPress = UILongPressGestureRecognizer()
longPress.delegate = self
longPress.minimumPressDuration = 0
longPress.addTarget(self, action: #selector(longPressGesture))
view.addGestureRecognizer(longPress)
let swipeUp = UISwipeGestureRecognizer()
swipeUp.delegate = self
swipeUp.direction = .up
swipeUp.addTarget(self, action: #selector(swipeUpGesture))
view.addGestureRecognizer(swipeUp)
Also In Swift 4 you will need to add @objc to your methods
@objc func longPressGesture(_ longPress: UILongPressGestureRecognizer) {
print("longPressGesture")
}
@objc func swipeUpGesture(_ swipeUp: UISwipeGestureRecognizer) {
print("swipeUpGesture")
}
Don't forget also to add the method shouldRecognizeSimultaneouslyWith as already mentioned by xmasRights:
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
print("shouldRecognizeSimultaneouslyWith")
return true
}
Upvotes: 2
Reputation: 1509
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool
{
return true
}
Upvotes: 1