22

avplayer で iPhone コントロールを制御するのに問題があります。

関数を入れると

- (void)remoteControlReceivedWithEvent:(UIEvent *)event

呼び出された関数の再生を担当するView Controllerで、現在のView Controllerでバックグラウンドに移動する場合のみ。

他のView Controllerからバックグラウンドに移動する場合、関数は呼び出されませんでした。

だから私はそれをアプリデリゲートに入れたいのです。

私はBecomefirstresponseを試し、すべてのView Controllerに関数を入れてみましたが、役に立ちました.

私も呼ぶ

[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];

の中に

-(void)applicationWillResignActive:(UIApplication *)application

ありがとう

4

3 に答える 3

24

以下のコードを iPhone コントロールに使用しました -

[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
[self becomeFirstResponder];

リモコンをリッスンするためのレジスタを取得するために使用されます。完了したら、それを削除します -

[[UIApplication sharedApplication] endReceivingRemoteControlEvents];
[self resignFirstResponder];

アプリをcanBecomeFirstResponderにする-

- (BOOL)canBecomeFirstResponder {
    return YES;
}

デリゲート メソッドを使用して、ホーム ボタンを 2 回タップしている間の再生と一時停止などの 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");
        }
    }
}

私の場合、再生と一時停止を処理できます。何か問題があればお知らせください。

于 2012-08-17T10:55:50.067 に答える
12

関数をレスポンダー チェーンの上位の UIApplication サブクラスに移動できます。このようにして、イベントをキャッチするために常に存在します。

この種のイベントは、一般的な UI およびコントローラー クラスでは無視されるため、アプリ デリゲートとアプリケーション自体が存在するレスポンダー チェーンの最下部まで移動します。

hereで述べたように、UIApplication のデリゲートはレスポンダー チェーンの一部ではありません (私はここで間違っていました)。UIApplication があり、ルート UIWidow、チェーン内のすべてのビュー、および対応する UIViewControllers もあります。

于 2012-08-12T16:40:51.283 に答える
2

ヒント:ではなく、viewDidAppearbecomeFirstResponder内から呼び出す必要があります...viewWillAppear

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    [self becomeFirstResponder];
}
于 2013-08-16T09:56:04.787 に答える