gpt4 book ai didi

swift - 处理多个 GestureRecognizers

转载 作者:搜寻专家 更新时间:2023-10-30 21:55:04 24 4
gpt4 key购买 nike

我在理解 UIGestureRecognizers 时遇到了问题。我现在的目标是拥有一组 GestureRecognizers 来执行不同的任务,例如:

override func viewDidLoad() {
mainScene = GameScene(size: self.view.bounds.size)
main = view as! SKView

mainScene.panRecognizer = UIPanGestureRecognizer(target: self, action: #selector(shiftView(recognizer:)))
main.addGestureRecognizer(mainScene.panRecognizer)

mainScene.tapRecognizer = UITapGestureRecognizer(target: self, action: #selector(testTap(recognizer:)))
main.addGestureRecognizer(mainScene.tapRecognizer)

mainScene.pinchRecognizer = UIPinchGestureRecognizer(target: self, action: #selector(zoomView(recognizer:)))
main.addGestureRecognizer(mainScene.pinchRecognizer)

这是我的游戏 View Controller ,我在其中处理诸如平移 map 、缩放和点击 map 图 block 等操作。但我也希望能够使用 UITapGestureRecognizer 移动 Sprite ,所以我也在我的 GameScene 中创建了这个:

if startGame == true{
self.startGame()
for node in (self.tempGameBoard.landShipLayer.children as? Array<landship>)! {

node.landShipInteraction = UITapGestureRecognizer(target: self, action: #selector(handleTap(recognizer:)))
parentViewController.view.addGestureRecognizer(node.landShipInteraction)
}
}

本例中的 landShip 代表屏幕上的 Sprite ,我想通过手势识别器与之交互。

我的问题是,如果我添加第二组识别器,点击操作将变得完全没有响应。我仍然可以缩放和平移,但我期望在我的 map 图 block 上的点击行为不会发生。我觉得我似乎缺少对手势识别器工作原理的一些理解。

有什么想法吗?

谢谢!

最佳答案

UIGestureRecognizerDelegate 有一个特殊的功能来管理对同一对象的多个手势的同时识别,这将达到目的。

1) 将您的 UIViewController 设置为符合 UIGestureRecognizerDelegate

2) 实现以下功能:

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {

if (gestureRecognizer == mainScene.panRecognizer || gestureRecognizer == mainScene.pinchRecognizer) && otherGestureRecognizer == mainScene.tapRecognizer {
return true
}
return false
}

在这个特定的示例中,我们允许点击手势与平移和捏契约(Contract)时触发。

3) 然后将代表分配给平移和捏合手势识别器:

override func viewDidLoad() {
// your code...

// Set gesture recognizers delegates
mainScene.panRecognizer.delegate = self
mainScene.pinchRecognizer.delegate = self
}

关于swift - 处理多个 GestureRecognizers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41918256/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com