pressEnded在tvOS没有被调用

时间:2016-02-23 12:57:24

标签: ios tvos tvos9.1

我正在使用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)
    }
}

3 个答案:

答案 0 :(得分:0)

我自己就碰到了这个。

我相信发生了什么,如果你重写方法:

- (void)pressesBegan:(NSSet<UIPress *> *)presses withEvent:(UIPressesEvent *)event

并且不要在某个地方用超级方法打电话:

[super pressesBegan:presses withEvent:event];

pressEnded也永远不会被调用。

我有一种情况,有时候会调用pressEnded,有时它不是,这是我能发现的唯一区别。

答案 1 :(得分:0)

看起来有某种错误,pressesEnded没有及时调用。我注意到在pressesEndedpressesBegan上加了一个断点。它始终在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