UITapGestureRecognizer&用于暂停/播放按钮的tvOS遥控器

时间:2015-11-03 18:47:05

标签: objective-c uitapgesturerecognizer tvos apple-tv

我正在尝试在用户点击Apple TV遥控器上的暂停/播放按钮时创建一个动作。我查看了文档,但Apple推荐的代码不起作用。这是我的代码如下。有人可以告诉我我做错了什么吗?需要考虑的事项: 我正在使用AVPlayerMovieController&我的代码中确实有另一个手势识别器,但是它是一个轻扫手势,这个方法被调用,而不是暂停/播放。有人可以帮忙吗?

    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];  
    tap.allowedPressTypes = @[[NSNumber numberWithInteger:UIPressTypePlayPause]];  
    [self.view addGestureRecognizer:tap];

谢谢

4 个答案:

答案 0 :(得分:6)

您可以覆盖pressEnded方法:

override func pressesEnded(presses: Set<UIPress>, withEvent event: UIPressesEvent?) {
    for press in presses {
        if(press.type == UIPressType.PlayPause) {
           // Do what you want
           // ...
        } else {
            super.pressesEnded(presses, withEvent: event)
        }

    }
}

答案 1 :(得分:3)

我有同样的问题,我找到了解决方案,但说实话我根本不喜欢它(但至少它对我有用)。

在视图中我添加了加载

let tapRecognizer = UITapGestureRecognizer(target: self, action: "playPauseButtonPressed:")
    tapRecognizer.allowedPressTypes = [NSNumber(integer: UIPressType.PlayPause.rawValue)];
    self.view.addGestureRecognizer(tapRecognizer)

UIApplication.sharedApplication().beginReceivingRemoteControlEvents()

我实施了两种方法:

    func playPauseButtonPressed(sender: AnyObject) {
    self.buttonPlayClicked(buttonPlay)
    print("PRESSED")
}

override func remoteControlReceivedWithEvent(event: UIEvent?) {
    self.buttonPlayClicked(buttonPlay)
    print("EVENT")
}

我很确定我做的不对,但我无法在任何地方找到解决方案。 这只是我的即兴创作,对我有用。

希望这有帮助。

答案 2 :(得分:2)

我使用了以下内容,并且我的识别器被称为。我认为您需要获取PlayPause UIPressType的rawValue而不仅仅是PlayPause UIPressType。

let playPauseRecognizer = UITapGestureRecognizer(target: self, action: "playPauseRecognizer:")
playPauseRecognizer.allowedPressTypes = [NSNumber(integer: UIPressType.PlayPause.rawValue)]

view.addGestureRecognizer(playPauseRecognizer)

答案 3 :(得分:0)

我遇到同样的问题,即播放/暂停事件在视图控制器中不起作用。解决方法是在appdelegate中的UIWindow中添加播放/暂停UITapGestureRecognizer,并使用通知广播事件。