一个视图上有两个 UIGestureRecognizer?
Two UIGestureRecognizer on one view?
我正在使用 spriteKit。我不知道这是否重要。我已经在 didMove(toView):
中为我的视图初始化了两个 UIGestureRecognizer
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)
我的问题是只调用了第一个 gestureRecognizer (longpressGest)。当我删除第一个 GestureRecognizer 时,swipeGestureRecognizer 会起作用。我该如何解决?
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool
{
return true
}
您需要让您的游戏场景查看手势识别器的委托。您还需要实现 xmasRights 提到的方法 shouldRecognizeSimultaneouslyWith:
所以在你的游戏场景声明中只需添加 UIGestureRecognizerDelegate
:
class GameScene: SKScene, SKPhysicsContactDelegate, UIGestureRecognizerDelegate {
然后在您的 didMove(to view: SKView) 方法中设置其委托:
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)
此外,在 Swift 4 中,您需要将 @objc 添加到您的方法中
@objc func longPressGesture(_ longPress: UILongPressGestureRecognizer) {
print("longPressGesture")
}
@objc func swipeUpGesture(_ swipeUp: UISwipeGestureRecognizer) {
print("swipeUpGesture")
}
别忘了添加 xmasRights 已经提到的方法 shouldRecognizeSimultaneouslyWith:
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
print("shouldRecognizeSimultaneouslyWith")
return true
}
您也可以使用相同的手势识别器,并在此函数中区分两个手势
我正在使用 spriteKit。我不知道这是否重要。我已经在 didMove(toView):
中为我的视图初始化了两个 UIGestureRecognizerlet 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)
我的问题是只调用了第一个 gestureRecognizer (longpressGest)。当我删除第一个 GestureRecognizer 时,swipeGestureRecognizer 会起作用。我该如何解决?
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool
{
return true
}
您需要让您的游戏场景查看手势识别器的委托。您还需要实现 xmasRights 提到的方法 shouldRecognizeSimultaneouslyWith:
所以在你的游戏场景声明中只需添加 UIGestureRecognizerDelegate
:
class GameScene: SKScene, SKPhysicsContactDelegate, UIGestureRecognizerDelegate {
然后在您的 didMove(to view: SKView) 方法中设置其委托:
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)
此外,在 Swift 4 中,您需要将 @objc 添加到您的方法中
@objc func longPressGesture(_ longPress: UILongPressGestureRecognizer) {
print("longPressGesture")
}
@objc func swipeUpGesture(_ swipeUp: UISwipeGestureRecognizer) {
print("swipeUpGesture")
}
别忘了添加 xmasRights 已经提到的方法 shouldRecognizeSimultaneouslyWith:
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
print("shouldRecognizeSimultaneouslyWith")
return true
}
您也可以使用相同的手势识别器,并在此函数中区分两个手势