RemoteControlReceivedWithEvent не вызван в appDelegate
У меня проблема с управлением элементами управления iPhone с помощью моего avplayer.
если я положил функцию
- (void)remoteControlReceivedWithEvent:(UIEvent *)event
в контроллере представления, который отвечает за воспроизведение функции, но только если я собираюсь использовать фон в текущем контроллере.
если я собираюсь использовать фон из другого контроллера представления, функция никогда не вызывалась.
почему я хочу поместить его в делегат приложения.
Я попробовал Becomefirstresponse и поместил функцию в каждый контроллер вида, но это помогло.
также я называю
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
в
-(void)applicationWillResignActive:(UIApplication *)application
спасибо
Ответы
Ответ 1
Вы можете переместить функцию по цепочке ответчиков в подкласс UIApplication. Таким образом, он всегда будет улавливать событие.
Этот вид событий игнорируется в общих классах интерфейса и контроллера, поэтому он перемещается до нижней части цепочки ответчиков, где находятся делегат приложения и сам приложение.
Как отмечено здесь, делегат UIApplication не входит в цепочку ответчиков (я был здесь не так). Здесь есть UIApplication, так что это root UIWidow, все представления в цепочке и соответствующие UIViewControllers.
Ответ 2
Я использовал ниже код для iPhone Control -
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
[self becomeFirstResponder];
Используется для регистрации регистра для прослушивания пульта дистанционного управления.
После этого удалите его -
[[UIApplication sharedApplication] endReceivingRemoteControlEvents];
[self resignFirstResponder];
сделать приложение canBecomeFirstResponder -
- (BOOL)canBecomeFirstResponder {
return YES;
}
Используется метод делегата для управления iPhone, например, воспроизведение и пауза, а doble нажмите на домашнюю кнопку
- (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");
}
}
}
В моем случае я могу справиться с воспроизведением и паузой. Пожалуйста, сообщите, если что-то не так.
Ответ 3
Подсказка: becomeFirstResponder
должен вызываться из viewDidAppear, а не viewWillAppear
...
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
[self becomeFirstResponder];
}