swift – 处理多个GestureRecognizers
发布时间:2020-12-14 04:43:00 所属栏目:百科 来源:网络整理
导读:我遇到了一个理解UIGestureRecognizers的问题.我现在的目标是让一组GestureRecognizers执行不同的任务,例如: override func viewDidLoad() { mainScene = GameScene(size: self.view.bounds.size) main = view as! SKView mainScene.panRecognizer = UIPanG
我遇到了一个理解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,我可以处理诸如在地图上平移,缩放和点击地图图块等操作.但我也希望能够使用UITapGestureRecognizer移动精灵,所以我也在我的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代表屏幕上的精灵,我想通过手势识别器与之交互. 我的问题是,如果我添加第二组识别器,则攻丝动作变得完全没有响应.我仍然可以缩放和平移,但我不希望在地图图块上出现我所期望的点击行为.我觉得好像缺少对手势识别器如何工作的理解. 有任何想法吗? 谢谢! 解决方法
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 } 在这个特定的例子中,我们允许在平移和捏合的同时触发轻击手势. 3)然后只需将代表分配到平移和捏手势识别器: override func viewDidLoad() { // your code... // Set gesture recognizers delegates mainScene.panRecognizer.delegate = self mainScene.pinchRecognizer.delegate = self } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |