Почему мой .delaystouchesbegan не работает постоянно?

Изменение .delaysTouchesBegan = true на = false ОБЫЧНО работает в моей игре, однако время от времени он застревает на true и не переключится обратно на false, если я не закрою приложение и не открою снова.

Игра похожа на Flappy Birds, но до того, как touchBegan запустит игру, у вас есть возможность провести пальцем влево или вправо, чтобы изменить цвета, музыку и т. д. Поэтому мне нужно, чтобы .delaysTouchesBegan был «истинным» до того, как начнутся касания. Это периодически возникающая проблема, поэтому я не уверен, в чем может быть причина.

Я создал свои жесты смахивания в своем классе 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

    }
}

Затем в touchBegan:

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 в качестве меры предосторожности, но все равно получаю тот же результат.

Даже если я получу распечатку (касания не следует откладывать), иногда они все равно будут отложены и не будут переключаться обратно, даже после повторного представления моей GameScene после того, как моя «Flappy Bird» умрет.

Я даже попытался добавить приведенный выше код в свой метод обновления, но все равно не повезло.

1
0
101
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В итоге я поместил код в свою функцию обновления, и проблема была решена. Сейчас работает стабильно. Я уверен, что это не лучшее место для размещения кода, но это единственное место, которое решило проблему.

override func update(_ currentTime: TimeInterval) {

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

Другие вопросы по теме