Подтвердить что ты не робот

RemoteControlReceivedWithEvent не вызван в appDelegate

У меня проблема с управлением элементами управления iPhone с помощью моего avplayer.

если я положил функцию

- (void)remoteControlReceivedWithEvent:(UIEvent *)event

в контроллере представления, который отвечает за воспроизведение функции, но только если я собираюсь использовать фон в текущем контроллере.

если я собираюсь использовать фон из другого контроллера представления, функция никогда не вызывалась.

почему я хочу поместить его в делегат приложения.

Я попробовал Becomefirstresponse и поместил функцию в каждый контроллер вида, но это помогло.

также я называю

[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];

в

-(void)applicationWillResignActive:(UIApplication *)application

спасибо

4b9b3361

Ответ 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];
}