Цель состоит в том, чтобы выполнять действие каждые 0,5 секунды, пока нажатие кнопки поддерживается, и прекращать это действие после завершения касания.Следуя советам из других постов здесь, в SO, я применил стратегию использования логического значения, которое имеет значение true на touchDown и значение false на touchUp.Однако, похоже, что функция touchUp либо не устанавливает логическое значение, либо touchDown игнорирует его, потому что, когда я поднимаю свой искатель с кнопки, действие продолжается.
Вот мой код касаний:
// MARK: - Touches
func touchDown(atPoint pos : CGPoint) {
print("Touched Down in \(purpose) down arrow")
arrowIsPressed = true
self.texture = SKTexture(imageNamed: "bottomArrowPressed.png")
adjustBlue() // Because you want one immediate action, in case there is no continuous touch
while arrowIsPressed == true {
perform(#selector(callback), with: nil, afterDelay: 1.0)
}
}
func touchUp(atPoint pos : CGPoint) {
arrowIsPressed = false
self.texture = SKTexture(imageNamed: "bottomArrow.png")
adjustCounter = 0
}
// MARK: - Touch Helpers
@objc func callback() {
self.adjustBlue()
}
func adjustBlue() {
adjustCounter += 1
print("Adjust Action \(adjustCounter)")
// eventually useful code will go here
}
Обратите внимание, что это небольшая кнопка, и я не беспокоюсь о том, чтобы отслеживать несколько касаний.
Где моя логика не работает?Я чувствую, что это довольно прямая задача и решение, но я делаю что-то не так и не могу понять, что.
ОБНОВЛЕНИЕ: помещая оператор печати в цикл while, я вижу, что цикл while вызываетсяочень быстро снова и снова, даже если у меня есть оператор выполнения с задержкой в 0,5 секунды.Не уверен, почему ...