Изменение .delaysTouchesBegan = true на = false ПОЛЕЗНО работает в моей игре, однако, время от времени оно застревает на true и не переключится обратно на false, если я не закрою приложение и не открою снова.
Игра похожа на Flappy Birds, но перед тем, как touchSegan запускает игру, у вас есть возможность провести пальцем влево или вправо, чтобы изменить цвета, музыку и т. Д. Поэтому мне нужно, чтобы .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 просто в качестве меры предосторожности, но я все еще получаю тот же результат.
Даже если я получу отпечаток (касания не следует откладывать), иногда они все равно будут задерживаться и не переключатся обратно, даже после повторного представления моей GameScene после того, как моя «Flappy Bird» умрет.
Я даже пытался добавить приведенный выше код в мой метод обновления, но все еще не повезло.