我在使用我的avplayer控制iPhone控件时遇到问题。
如果我把功能
- (void)remoteControlReceivedWithEvent:(UIEvent *)event
在负责播放被调用函数的视图控制器中,但仅当我要在当前视图控制器中进行后台操作时。
如果我从其他视图控制器转到后台,则该函数从未调用过。
这就是我想把它放在app委托中的原因。
我尝试了Becomefirstresponse并将该功能放在每个视图控制器中但它确实有帮助。
我也打电话给
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
中的
-(void)applicationWillResignActive:(UIApplication *)application
感谢
答案 0 :(得分:23)
我已将以下代码用于iPhone控制 -
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
[self becomeFirstResponder];
用于获取用于收听遥控器的注册。 完成后删除它 -
[[UIApplication sharedApplication] endReceivingRemoteControlEvents];
[self resignFirstResponder];
使应用 canBecomeFirstResponder -
- (BOOL)canBecomeFirstResponder {
return YES;
}
使用委托方法处理iPhone控件,例如在主页按钮上点按播放和暂停
- (void)remoteControlReceivedWithEvent:(UIEvent *)event {
//if it is a remote control event handle it correctly
if (event.type == UIEventTypeRemoteControl) {
if (event.subtype == UIEventSubtypeRemoteControlPlay) {
[audioPlayer play];
NSLog(@"play");
} else if (event.subtype == UIEventSubtypeRemoteControlPause) {
[audioPlayer stop];
NSLog(@"pause");
} else if (event.subtype == UIEventSubtypeRemoteControlTogglePlayPause) {
NSLog(@"toggle");
}
}
}
在我的情况下,我能够处理游戏和暂停。请让我知道是否有任何错误。
答案 1 :(得分:12)
您可以将响应程序链中的函数移动到UIApplication子类。这样,它总会在那里捕捉事件。
这种事件在常见的UI和控制器类中被忽略,因此它会一直移动到响应者链的底部,您的应用程序委托和应用程序本身就在其中。
如前所述here,UIApplication的代表不是响应者链的一部分(我在这里错了)。 UIApplication就在那里,根UIWidow也是如此,链中的所有视图和相应的UIViewControllers都是。
答案 2 :(得分:2)
提示:必须在viewDidAppear内调用becomeFirstResponder
,而不是viewWillAppear
...
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
[self becomeFirstResponder];
}