为什么我的.delaysTouchesBegan无法持续工作?

时间:2018-10-26 02:41:40

标签: swift swipe uiswipegesturerecognizer touchesbegan intermittent

更改.delaysTouchesBegan = true到= false通常在我的游戏中起作用,但是,每隔一段时间它会停留在true上,除非我关闭应用程序并重新打开,否则它不会切换回false。

该游戏类似于《飞扬的小鸟》,但是在touchesBegan开始游戏之前,您可以选择向左或向右滑动以更改颜色,音乐等。因此,在触摸开始之前,我需要.delaysTouchesBegan为“ true”。这是一个间歇性问题,所以我不确定是什么原因。

我已经在GameScene类中创建了滑动手势:

let swipeRightRec = UISwipeGestureRecognizer()
let swipeLeftRec = UISwipeGestureRecognizer()

然后我将此功能添加到我的didMove(以查看)中:

func addSwipes(){

        swipeRightRec.addTarget(self, action: #selector(GameScene.swipedRight) )
        swipeRightRec.direction = .right
        self.view!.addGestureRecognizer(swipeRightRec)

        swipeLeftRec.addTarget(self, action: #selector(GameScene.swipedLeft) )
        swipeLeftRec.direction = .left
        self.view!.addGestureRecognizer(swipeLeftRec)

    if gameState == .showingLogo {

        swipeLeftRec.delaysTouchesBegan = true
        swipeRightRec.delaysTouchesBegan = true

    }
}

然后开始接触:

if swipeLeftRec.delaysTouchesBegan == true || swipeRightRec.delaysTouchesBegan == true {
                            swipeLeftRec.delaysTouchesBegan = false
                            swipeRightRec.delaysTouchesBegan = false
                            self.view?.removeGestureRecognizer(swipeLeftRec)
                            self.view?.removeGestureRecognizer(swipeRightRec)
                            print("Touches should not be delayed")
                        }

我已经在if语句的内部和外部进行了尝试,并使用了removeGestureRecognizer作为预防措施,但是我仍然得到相同的结果。

即使我得到打印(触摸不应该延迟),即使在我的“ Flappy Bird”死后重新展示了GameScene之后,它们有时仍会延迟并且不会切换回来。

我什至尝试将上述代码添加到我的更新方法中,但还是没有运气。

1 个答案:

答案 0 :(得分:0)

我最终将代码放入我的更新函数中,它解决了问题。现在,它始终如一地工作。我确定这不是放置代码的最佳位置,但这是解决问题的唯一位置。

override func update(_ currentTime: TimeInterval) {

    if gameState == .startScreen {
        swipeLeftRec.delaysTouchesBegan = true
        swipeRightRec.delaysTouchesBegan = true
    } else {
        swipeLeftRec.delaysTouchesBegan = false
        swipeRightRec.delaysTouchesBegan = false
    }