首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >平移手势与轻拍手势的冲突

平移手势与轻拍手势的冲突
EN

Stack Overflow用户
提问于 2018-06-22 12:45:44
回答 1查看 2.6K关注 0票数 0

我目前正在开发一个使用UIGestureRecognizers的游戏。我使用平移手势来移动播放器,使用轻击手势来检测其他UI按钮的触摸。除了两个手势之间有冲突之外,一切似乎都很好。每当玩家在移动(平移手势被识别)时,游戏会忽略我所有的轻击手势(一旦识别了平移手势,视图就不会识别轻拍手势)。谁能告诉我如何让这两个手势一起工作。我想让玩家在点击UI按钮时停止移动。换句话说,每当识别到轻击手势时,我都想取消平移手势。

提前谢谢你!

下面是我如何设置这两个手势:

代码语言:javascript
复制
   let singleTap = UITapGestureRecognizer(target: self, action: #selector(doSingleTap))
    singleTap.numberOfTapsRequired = 1
    singleTap.delegate = self
    self.view?.addGestureRecognizer(singleTap)


   let panGesture = UIPanGestureRecognizer(target: self, action: #selector(handlePan))
    panGesture.minimumNumberOfTouches = 1
    panGesture.delegate = self
    self.view?.addGestureRecognizer(panGesture)


@objc func handlePan(gestureReconizer: UIPanGestureRecognizer) {

    if isPaused || player.isInAction {return}

    let translation = gestureReconizer.translation(in: self.view)

    if gestureReconizer.state == .changed {
        let angle = 180 + (atan2(-translation.x, translation.y) * (180/3.14159))
        player.movementAngle = angle
        player.atState = .Walk
    }
    if gestureReconizer.state == .ended {
        player.movementAngle = 0.0
        if player.atState == .Walk {
            player.atState = .Idle
        }
    }
}



@objc func doSingleTap(gestureReconizer: UITapGestureRecognizer) {

    let originaTapLocation = gestureReconizer.location(in: self.view)

    let location = convertPoint(fromView: originaTapLocation)
    let node = atPoint(location)

        switch node.name {
        case "HeroAvatar":
            //do stuff here
            break

        case "Fire":

            //do stuff here
            break

        case "Potion":
            //do stuff here
            break

        default:
            break
        } 
}
EN

回答 1

Stack Overflow用户

发布于 2018-06-22 13:15:01

您需要实现UIGestureRecognizerDelegate的委托方法,如下所示:

代码语言:javascript
复制
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer,
                       shouldRequireFailureOf otherGestureRecognizer: UIGestureRecognizer) -> Bool {

    // Don't recognize a single tap gesture until a pan gesture fails.
    if gestureRecognizer == singleTap &&
        otherGestureRecognizer == panGesture {
        return true
    }
    return false
}

希望这将为您工作:)

有关更多信息,请访问Apple Doc Preferring One Gesture Over Another

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50980808

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档