我正在用swift spritekit为tvOS开发一个游戏。有一个显示SKScene B的viewcontroller A。我正在将pressesBegan和pressesEnded从A转发到B。
在A中调用pressesBegan并将其转发到B,但在A中甚至没有调用pressedEnded。我不明白为什么?
下面是在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)
}
}
发布于 2016-03-01 23:10:49
我自己也遇到了这个。
我相信如果你重写这个方法:
- (void)pressesBegan:(NSSet<UIPress *> *)presses withEvent:(UIPressesEvent *)event
并且不要在方法中的某个地方调用super:
[super pressesBegan:presses withEvent:event];
pressedEnded也从未被调用过。
我遇到过这样一种情况,有时调用pressesEnded,有时不调用,这是我能发现的唯一区别。
发布于 2016-12-22 01:41:27
它看起来像是pressesEnded
没有被及时调用的某种bug。我注意到在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。
发布于 2017-11-15 22:50:53
我也遇到过这种情况。
经过一些测试,似乎当“选择”按钮被释放时,tvOS会调用pressesEnded(_ presses: Set<UIPress>, with event: UIPressesEvent?)
或 pressesCancelled(_ presses: Set<UIPress>, with event: UIPressesEvent?)
。
至于为什么会这样,我不知道。在每次按下按钮时,我没有做任何不同的事情。可能是tvOS中的一个bug。
我跳转到pressesEnded(_ presses: Set<UIPress>, with event: UIPressesEvent?)
的定义,找到了这个解决方案,并找到了这个评论:
您的响应者将收到按下each :withEvent或按下取消:withEvent:按下的每个按键(按下press :withEvent:)。
这是我就同一问题提出的问题的link。
https://stackoverflow.com/questions/35578243
复制相似问题