2012年5月20日日曜日

リモートコントロールイベントサンプル - マルティメディアの操作

前回は「モーションイベントサンプル3 - CoreMotionを使った各種センサーの利用」でした。
iOS Developer Libraryの「iOSイベント処理ガイド」(英語版はEvent Handling Guide for iOS)に沿って、サンプルを公開します。今回が最後のイベント処理「リモートコントロールイベント」です。

リモートコントロールイベント【iOS 4.0以降】

「iOSイベント処理ガイド」の初回「マルチタッチイベントサンプル1 - Gesture Recognizer」にも紹介した図ですが、今回は「Remote-control events」のところになります。iPhoneに付属のイヤホンを使い、音楽プレイヤーの「一時停止」「再生」「次の曲へ」といった操作をすることができます。
ドキュメントにも書かれていますが、音楽・映像だけではなく、「画像」などのマルチメディアを操作することを想定しているようです。ただ、音楽以外に使うのは馴染みもなく実用性のあるアプリは難しいかもしれません。

実装の手順

  1. ファーストレスポンダになる
    - (BOOL)canBecomeFirstResponder
    {
        return YES;
    }
    
    - (void)viewDidAppear:(BOOL)animated
    {
        [super viewDidAppear:animated];
        [[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
        
        [self becomeFirstResponder];
    }
    
  2. リモートコントロールイベントの処理
    - (void)remoteControlReceivedWithEvent:(UIEvent *)event
    {
        if (event.type == UIEventTypeRemoteControl) {
            switch (event.subtype) {
                case UIEventSubtypeRemoteControlPlay:
                    // 再生
                    break;
                case UIEventSubtypeRemoteControlPause:
                    // 一時停止
                    break;
                case UIEventSubtypeRemoteControlStop:
                    // 停止
                    break;
                case UIEventSubtypeRemoteControlTogglePlayPause:
                    // 「Now Playing」の再生・一時停止から呼ばれる
                    break;
                case UIEventSubtypeRemoteControlNextTrack:
                    // 次の曲へ
                    break;
                case UIEventSubtypeRemoteControlPreviousTrack:
                    // 前の曲へ
                    break;
                case UIEventSubtypeRemoteControlBeginSeekingBackward:
                    // 巻き戻し開始
                    break;
                case UIEventSubtypeRemoteControlEndSeekingBackward:
                    // 巻き戻し終了
                    break;
                case UIEventSubtypeRemoteControlBeginSeekingForward:
                    // 早送り開始
                    break;
                case UIEventSubtypeRemoteControlEndSeekingForward:
                    // 早送り終了
                    break;
                default:
                      // UIEventSubtypeNone と UIEventSubtypeMotionShakeなので来ない
                    break;
            }
        }
    }
  3. 管理を終える場合、リモートコントロールイベントの停止
    - (void)viewWillDisappear:(BOOL)animated
    {
        [[UIApplication sharedApplication] endReceivingRemoteControlEvents];
        [self resignFirstResponder];
        
        [super viewWillDisappear:animated];
    }
    

「Now Playing」コントロールとは

リモートコントロールイベントは、イヤホンなどから操作することができるのですが、それらが無くともリモートコントロールイベントをアプリケーションに送ることができます。それが「Now Playing」コントロールです。音楽を再生すると、この「Now Playing」コントロールに表示されるようになります。
ダブルタップでアプリ一覧を表示スワイプすると表示される


サンプル

ソースコードはGitHubにて公開しています。
iOS-SampleCodes/RemoteControlSample - GitHub

なお、サンプルに含めている音源は、「音楽素材/魔王魂」様のものを利用させていただいております。ゲーム音楽に使える音楽ばかりで格好良いです。

起動時「Now Playing」に表示されます

「再生」ボタンで再生「一時停止」ボタンで一時停止

「次の曲」ボタン長押しで「早送り」の開始離すと「早送り」の停止


0 コメント:

コメントを投稿