如何在Objective-C中收听Apple TV Remote?

问题描述 投票:1回答:1

这似乎应该很简单,但是我很难找到一个有效的示例,良好的文档甚至是很多有用的StackOverflow帖子。

我有一个包含AVPlayer的自定义视图,如下所示:

@implementation
{
    @private
    AVPlayerViewController *controller
}

- (id) init
{
    self = [super init];
    if (self)
    {
        controller = [[AVPlayerViewController alloc] init];
        controller.view.frame = self.view.bounds;
        [self.view addSubview:controller.view];
    }
    return self;
}

@end

((我还有其他一些视图,例如覆盖播放器的消息,在交换视频时显示的海报等,但这是基本设置)

当我集成IMA SDK时,我开始遇到问题。如果您在广告期间按遥控器上的“暂停”按钮,则可以暂停广告。但是,如果您按下暂停按钮再次,则它不会取消暂停广告,而是会取消暂停我的内容播放器在广告后面的作用。我没有听到任何音频,但是我知道内容播放器没有暂停,因为我的视频中有ID3元数据,当我点击它时,它有一个NSLog()语句,并且我开始看到这些日志。如果再次按下暂停按钮,日志将暂停。我第四次按下它,日志再次启动。

为了解决此问题,我想将听众绑定到遥控器的播放/暂停按钮,并确保如果我正在播放广告,则恢复[[ad,而不是内容。因此,我尝试在我的视图的init方法中添加以下内容:

UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self.view action:@selector(tapped:)]; [tapRecognizer setAllowedPressTypes:@[ [NSNumber numberWithInt:UIPressTypePlayPause] ]]; [self.view addGestureRecognizer:tapRecognizer];
然后我创建了以下方法:

- (void) tapped: (UITapGestureRecognizer *) sender { NSLog(@"Tapped"); }

没有被调用。我很确定自己犯了一个简单的错误,但是文档不是很清楚,所以我不确定应该怎么做。 official documentation on detecting button presses使用Swift并说:

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

相信

我把这三行翻译得很好。然后,文档未显示tapped方法的外观,而是继续处理低级事件处理。因此,为了获得适当的方法签名,我查看了the documentation on UITagGestureRecognizer,该示例具有以下用于编写处理程序的(Swift)示例:func handleTap(sender: UITapGestureRecognizer) { if sender.state == .ended { // handling code } }
这就是为什么我选择- (void) tapped: (UITapGestureRecognizer *) sender

仍然,毕竟,这是行不通的。

快速更新

我尝试替换:

initWithTarget:self.view

使用:

initWithTarget:controller.view

和:

self.view addGestureRecognizer

使用:

controller.view addGestureRecognizer

这次,当我按下播放/暂停按钮时,似乎确实发生了某些事情。应用程序崩溃了,Xcode给了我以下错误:

2019-12-17 12:16:50.937007-0500 Example tvOS App[381:48776] -[_AVPlayerViewControllerContainerView tapped:]: unrecognized selector sent to instance 0x10194e060

所以它

似乎像

(如果我错了,请纠正我):
    [AVPlayerViewController具有焦点,而不是我的视图
  • 手势识别器将在您注册选择器的任何类上调用选择器,而不是在进行注册的类上进行选择
  • 因此,我想想一个替代性的问题是:我如何允许

    my

  • 类处理someother类(例如AVPlayerViewController)上的手势?] >这似乎应该很简单,但是我很难找到有效的示例,良好的文档甚至是很多有用的StackOverflow帖子。我有一个自定义视图...
    objective-c avplayer tvos uitapgesturerecognizer avplayerviewcontroller
    1个回答
    0
    投票
    要解决unrecognized selector崩溃,您需要确保为手势识别器提供正确的对象作为targetUIGestureRecognizer的工作方式是,识别手势后,它将在给定selector对象上调用给定target。换句话说,当手势触发时,它将执行以下操作:
    © www.soinside.com 2019 - 2024. All rights reserved.