取消点击手势识别器

Posted

技术标签:

【中文标题】取消点击手势识别器【英文标题】:cancelling a tap gesture recongiser 【发布时间】:2016-01-19 04:05:46 【问题描述】:

参考我上一个问题:

Sprite moves two places after being paused and then unpaused

您好,我有一个点击手势,可以将游戏中的精灵向前移动 1 个空格,当我按下暂停按钮时,它会继续注册点击手势,然后当我恢复游戏时,它会移动两个空格。

所以我设法定义了一个 bool 变量来检测(使用 if 语句)我是否暂停了点击手势

var tapIsPaused: Bool = false



func tapUp()

    if(tapIsPaused == true) 

        //do nothing


     else if (tapIsPaused == false) 

        let amountToMove:CGFloat = levelUnitHeight

        let move:SKAction = SKAction.moveByX(0, y: amountToMove, duration: 0.1)


        menubutton.hidden = true
        settingsButton.hidden = true
        highscoreLabel.hidden = true
        pauseButton.hidden = false

        thePlayer.runAction(move)

        clearNodes()

    


但我现在遇到的问题是,当我按下恢复按钮恢复游戏时,它仍然会移动精灵,但这一次它只向上移动一个空格,这是因为当我按下恢复按钮时,它会转动水龙头然后在其上注册点击恢复按钮以向上移动播放器。

我该如何解决这个问题?

这是我的暂停按钮:

 else if (node == pauseButton) 

        tapIsPaused = true
        pauseButton.removeFromParent()
        addChild(resumeButton)
        addChild(restartButton)
        self.runAction (SKAction.runBlock(self.pauseGame))

    

这是我的简历按钮:

 else if (node == resumeButton) 


        resumeButton.removeFromParent()
        restartButton.removeFromParent()
        addChild(pauseButton)
        self.runAction (SKAction.runBlock(self.resumeGame))
        tapIsPaused = false

    

这是我的点击手势处理程序代码:

 let TapUpRec = UITapGestureRecognizer()




 TapUpRec.addTarget(self, action: "tapUp")
    self.view!.addGestureRecognizer(TapUpRec)

【问题讨论】:

尝试在代码中调用 runAction 方法之前输入 tapIsPaused = false 以获取恢复按钮 我建议您发布您的点击手势处理程序代码。 【参考方案1】:

您可以使用以下方法删除暂停点击手势:

self.view.removeGestureRecognizer(YOUR_GESTURE_RECOGNISER)

如果继续游戏,请重新添加

【讨论】:

你的传奇。谢谢。【参考方案2】:

修改简历功能为:

 else if (node == resumeButton) 

    resumeButton.removeFromParent()
    restartButton.removeFromParent()
    addChild(pauseButton)
    tapIsPaused = false
    self.runAction (SKAction.runBlock(self.resumeGame))

【讨论】:

【参考方案3】:

非常简单和最简单的方法。无需添加或删除手势。

您可以通过启用或禁用手势来做到这一点。

对于 swift 2.3

TapUpRec.enabled = false //pause click

TapUpRec.enabled = true //resume click

对于 swift 3.0

TapUpRec.isEnabled = false //pause click

TapUpRec.isEnabled = true //resume click

【讨论】:

以上是关于取消点击手势识别器的主要内容,如果未能解决你的问题,请参考以下文章

iOS - 忽略点击手势

如果按下子视图的按钮,如何取消 UIGestureRecognizer

Xamarin.Forms 第23局:手势识别

如何识别调用了哪个点击手势识别器?

在边界内点击手势识别器

在 Swift 中无法识别点击手势(手势开始)