2

MPMoviePlayerViewControllerが iPad でフルスクリーン モードになっている場合、デフォルトでは、そのコントロールにオーバーレイ上に前と次のボタンが表示されます。私のプロジェクトでは、そのオーバーレイ ボタンのクリックをキャプチャし、それに応じて処理する必要があります。プレイリストを呼び出す方法がわからないので、まだ次のアイテムがなく、フルスクリーン モードを終了するとボタンをクリックするとビューが壊れます。どういうわけか、何をすべきかわからず、エラーは発生しません。

私が知りたいのは、fullscreen次のボタンと前のボタンからそのイベントをリッスン/キャッチする方法があるかどうかです。

MPMoviePlayerまた、 、MPMoviePlayerController、およびに独自のコントロールを使用してオーバーレイを作成しようとしましたがMPMoviePlayerViewController、成功しませんでした。プレーヤーfullscreenがモードに入ると、存在していたオーバーレイはすべて無視され、画面のズームとともに実行されません。

fullscreenモード中にオーバーレイを表示する信頼できる方法はありますか? fullscreenApple のサンプルを見てきましたが、モード中に実際にビューに何かを追加することはできないようです。

どんな助けでも大歓迎です。

4

3 に答える 3

8

私は MPMoviePlayerViewController を使用していませんが、ドキュメンテーションをのぞき見に基づいた考えをいくつか示します。

MPMoviePlayerController には関連する可能性のある通知がいくつかあるようですが、「次と前のボタン」への特定の参照は見当たりません。シークボタンでしょうか?

で通知に登録する

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayerPlaybackStateChanged:) name:MPMoviePlayerPlaybackStateDidChangeNotification object:nil];

そして、この関数をオブジェクトに追加します:

-(void)moviePlayerPlaybackStateChanged:(NSNotification *)notification {
    MPMoviePlayerController *moviePlayer = notification.object;
    MPMoviePlaybackState playbackState = moviePlayer.playbackState;
    // ...
}

これらのボタンの MPMoviePlaybackStateSeekingForward および ...SeekingBackward の更新を取得していることに気付くと思います。

于 2010-08-02T18:12:48.687 に答える
2

これが私が偶然見つけたもう一つの可能​​性です。フルスクリーンモードのMPMoviePlayerControllerは、リモートコントロールイベントを送信している可能性があります。ビューコントローラでリモートコントロールイベントメッセージを有効にして、これらをキャッチします(ちなみに、iOS 4のみ)。

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

その後、実装します

[UIResponder remoteControlReceivedWithEvent:(UIEvent*)event];

ビューが消えたら、viewWillDisappearで登録を解除します。

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

これがうまくいくかどうかはわかりませんが、一見の価値があります。

于 2010-08-04T21:04:08.067 に答える
0

Seaamsu Campbellは正しいです:)彼のアプローチを使用して、再生制御イベントのイベントを取得しました。私の質問と回答を参照してください。

ユーザーがiPhoneの再生コントロールの早送りボタンと早巻きボタンをクリックしたことを知るにはどうすればよいですか

于 2010-08-30T07:00:18.693 に答える