微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

swift – 处理多个GestureRecognizers

我遇到了一个理解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
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐