3

タブ バー コントローラーを使用して iOS アプリを開発しています。最初のタブでは、AVQueuePlayer のインスタンスを配置して、Web から音楽の再生を開始しました。リモート コントロール イベントを介して再生および一時停止イベントを許可するように、すべてのコーディングを行いました。しかし、最初のタブにとどまっている場合にのみ、リモート コントロール イベントを受信できました。他のタブに切り替えると、最初のタブにリモート コントロール イベントが受信されません。

次の行を最初のタブのView Controllerに配置すると、2番目のタブにとどまっている場合でも、最初のタブへのリモートコントロールイベントを受け取ることができます.

- (BOOL)canResignFirstResponder
{
    return NO;
}

しかし、ユーザーが操作しなければならない他のビューにいくつかのテキスト フィールドがあります。最初のタブでファーストレスポンダを辞任しないことで、他のタブでテキストを入力できなくなります。

ユーザーが 2 番目のタブでアプリを操作しているときに、最初のタブで AVQueuePlayer インスタンスを制御するリモート コントロール イベントを処理する方法を教えてください。

ご協力いただきありがとうございます !

4

1 に答える 1

0

わかった。私はそれを自分で考え出した。

実装ファイルの先頭に avqueueplayer のグローバル変数を作成しました。viewDidLoad メソッドで AVQueuePlayer を割り当てて開始しました。再生と一時停止のイベントで何をすべきかを処理するクラス メソッドを作成しました。また、他のビュー コントローラーでこのクラス メソッドを呼び出して、それらのビュー コントローラーから直接リモート コントロール イベントを処理します。これが私がコーディングしたもののサンプルです:

//playerView header file

@interface playerView : UIViewController

+ (void)togglePlayPause;

@end

//playerView Implementation File

#import "playerView.h"

@interface playerView ()
@end

@implementation playerView

AVQueuePlayer *player;

- (void)viewDidLoad
{
[super viewDidLoad];
player = [[AVQueuePlayer alloc] initWithPlayerItem:[AVPlayerItem playerItemWithURL: someurl]];
}

+ (void) togglePlayPause
{
    if (player.rate == 1.0)
    {
        [player pause];
    }
    else if ((player.rate == 0.0) && ([player status]!= 2))
    {
        [player play];
    }
}

// include all other methods to handle remote control events as laid in apple documentation

@end



//otherView Implementation file

#include "playerView.h"


@interface otherView ()

@end

@implementation otherView

// include all other methods to handle remote control events as laid in apple documentation

- (void) remoteControlReceivedWithEvent: (UIEvent *) receivedEvent
{

    if (receivedEvent.type == UIEventTypeRemoteControl) {

        switch (receivedEvent.subtype) {
            case UIEventSubtypeRemoteControlTogglePlayPause:
                [playerView togglePlayPause];
                break;
            default:
                break;
        }
    }
}

@end

Apple のドキュメントに記載されているように、リモート コントロール イベントを処理する他のすべての方法については、以下を参照してください。

iOS 向けイベント処理ガイド - マルチメディアのリモート コントロール

于 2012-06-25T22:01:30.883 に答える