pressesEnded в tvOS не вызывается
Я занимаюсь разработкой игры для TVOS в быстром спрайтеките. Существует контроллер представления A, который представляет SKScene B. Я пересылаю прессы Beg и прессы, округленные от A до B.
pressesBegan вызывается в A и пересылается в B, но нажатие Ended даже не вызывается в A. Я не понимаю почему?
Ниже приведены функции, реализованные в A.
override func pressesEnded(presses: Set<UIPress>, withEvent event: UIPressesEvent?) {
if ((self.view as! SKView).scene?.isMemberOfClass(GameScene) == true){
let gameScene = (self.view as! SKView).scene as! GameScene
gameScene.pressesEnded(presses, withEvent: event)
}
}
override func pressesBegan(presses: Set<UIPress>, withEvent event: UIPressesEvent?) {
if ((self.view as! SKView).scene?.isMemberOfClass(GameScene) == true){
let gameScene = (self.view as! SKView).scene as! GameScene
gameScene.pressesBegan(presses, withEvent: event)
}
}
3 ответа
Я также столкнулся с этой ситуацией.
После некоторого тестирования кажется, что когда кнопка 'select' отпущена, tvOS вызывает либо pressesEnded(_ presses: Set<UIPress>, with event: UIPressesEvent?)
ИЛИ ЖЕ pressesCancelled(_ presses: Set<UIPress>, with event: UIPressesEvent?)
,
Что касается того, почему это, я не знаю. Там нет ничего, что я делаю по-разному между каждым нажатием кнопки. Может быть ошибка в tvOS.
Я нашел это решение, перейдя к определению pressesEnded(_ presses: Set<UIPress>, with event: UIPressesEvent?)
и найти этот комментарий:
Ваш респондент будет получать pressesEnded:withEvent или pressesCancelled:withEvent: за каждое нажатие, которое он обрабатывает (те нажатия, которые он получил в pressesBegan:withEvent:).
Вот ссылка на вопрос, который я задавал о той же проблеме.
Похоже, есть какая-то ошибка, где pressesEnded
не звонят вовремя. Я заметил, поставив точку останова на pressesEnded
а также pressesBegan
, Это всегда останавливается на pressesBegan
, но только останавливается на pressesEnded
после ожидания секунды, чтобы продолжить.
Единственный обходной путь, который я мог найти, это добавить это в viewDidLoad
:
let menuPressRecognizer = UITapGestureRecognizer()
menuPressRecognizer.addTarget(self, action: #selector(ShowListViewController.menuButtonAction))
menuPressRecognizer.allowedPressTypes = [NSNumber(value: UIPressType.menu.rawValue)]
self.view.addGestureRecognizer(menuPressRecognizer)
И тогда это:
func menuButtonAction() {
print("menu pressed")
UIControl().sendAction(#selector(URLSessionTask.suspend), to: UIApplication.shared, for: nil)
}
Это быстрый 3, кстати.
Просто столкнулся с этим сам.
Я считаю, что происходит, если вы переопределите метод:
- (void)pressesBegan:(NSSet<UIPress *> *)presses withEvent:(UIPressesEvent *)event
И не вызывайте super внутри метода где-нибудь:
[super pressesBegan:presses withEvent:event];
PressEnded также никогда не вызывается.
У меня была ситуация, когда иногда вызывался pressesEnded, а иногда - нет, и это единственное отличие, которое я мог заметить.