我正在使用swift spritekit为tvOS开发游戏。 有一个viewcontroller A,它提供了一个SKScene B.我正在将pressBegan和pressEnded从A转发到B.
pressBegan在A中被调用并被转发到B但是甚至没有在A中调用了pressedEnded.Iam没有得到原因?
以下是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)
}
}
答案 0 :(得分:0)
我自己就碰到了这个。
我相信发生了什么,如果你重写方法:
- (void)pressesBegan:(NSSet<UIPress *> *)presses withEvent:(UIPressesEvent *)event
并且不要在某个地方用超级方法打电话:
[super pressesBegan:presses withEvent:event];
pressEnded也永远不会被调用。
我有一种情况,有时候会调用pressEnded,有时它不是,这是我能发现的唯一区别。
答案 1 :(得分:0)
看起来有某种错误,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)
}
顺便说一下,那是快速的。
答案 2 :(得分:0)
我也遇到过这种情况。
经过一些测试后,似乎当“选择”按钮被释放时,tvOS会调用pressesEnded(_ presses: Set<UIPress>, with event: UIPressesEvent?)
或 pressesCancelled(_ presses: Set<UIPress>, with event: UIPressesEvent?)
。
至于为什么会这样,我不知道。每次按下按钮之间没有任何不同的做法。可能是tvOS中的一个错误。
我通过跳转到pressesEnded(_ presses: Set<UIPress>, with event: UIPressesEvent?)
的定义并找到此评论找到了这个解决方案:
您的响应者将收到pressEnded:withEvent或 pressCancelled:withEvent:每次按下它都是处理(那些 按下它在pressBegan中收到:withEvent:)。
以下是关于同一问题的问题link。