iOSゲーム本”iPhoneソーシャルゲーム開発”の写経8:動画の再生

Screen Shot 2012-07-24 at 18.12.00 Screen Shot 2012-07-24 at 18.12.14
今回は動画の再生について学習した。AV FoundationまたはMediaPlayerフレームワークを使う方法があり、書籍ではAV Foundationを使う方法が解説されている。

サンプルアプリは、画面上のUIViewをタップしてカメラロール(イメージピッカー)を起動させて動画を選択し、再生・停止・巻き戻しさせるというもの。viewDidLoadでタップジェスチャーを登録し、動画処理は、AVPlayerクラスのplay/pause/seekToTimeメソッドを呼んでる。iOSシミュレータにはデフォルトで動画が入っておらず、登録する必要がある。

- (void)viewDidLoad
{
    [super viewDidLoad];
	// Do any additional setup after loading the view, typically from a nib.

    // 動画を表示するビューがタップされたらchooseVideo:メソッドが呼ばれるようにする
    UITapGestureRecognizer *gesture;
    SEL sel;

    sel = @selector(chooseVideo:);
    gesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:sel];

    [self.previewView addGestureRecognizer:gesture];
}

// 動画を表示するビューがタップされたときに呼ばれるメソッド
- (void)chooseVideo:(UITapGestureRecognizer *)gesture
{
    // ジェスチャーが完了状態になっているときのみ実行する
    if (gesture.state != UIGestureRecognizerStateEnded) {
        return;
    }

    // イメージピッカーを作成する
    UIImagePickerController *picker;
    picker = [[UIImagePickerController alloc] init];

    // ライブラリから選択する
    picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;

    // 動画のみ表示する
    picker.mediaTypes = [NSArray arrayWithObject:(NSString *)kUTTypeMovie];

    // デリゲートを設定する
    picker.delegate = self;

    // イメージピッカーを表示する
    [self presentViewController:picker animated:YES completion:nil];
}

// イメージピッカーでファイルが選択されたときに呼ばれるメソッド
- (void)imagePickerController:(UIImagePickerController *)picker
didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    // 選択された動画ファイルのURLを取得して、プロパティにセットする
    self.movieURL = [info objectForKey:UIImagePickerControllerMediaURL];

    // 動画を再生するためにプレイヤーを作成する
    self.moviePlayer = [AVPlayer playerWithURL:self.movieURL];

    // 現在表示している動画のレイヤーを削除する
    if (self.movieLayer) {
        [self.movieLayer removeFromSuperlayer];
    }

    // 動画を表示するためのレイヤーを作成する
    self.movieLayer = [AVPlayerLayer playerLayerWithPlayer:self.moviePlayer];

    // レイヤーの大きさを設定する
    self.movieLayer.frame = self.previewView.bounds;

    // 動画はアスペクト比を維持してリサイズして、全体を表示する
    self.movieLayer.videoGravity = AVLayerVideoGravityResizeAspect;

    // レイヤーを表示する
    [self.previewView.layer addSublayer:self.movieLayer];

    // イメージピッカーを閉じる
    [picker dismissModalViewControllerAnimated:YES];
}

// 巻き戻しボタンの処理
- (IBAction)rewind:(id)sender
{
    // 再生位置を先頭に移動する
    [self.moviePlayer seekToTime:kCMTimeZero];
}

// 再生ボタンの処理
- (IBAction)play:(id)sender
{
    // 再生する
    [self.moviePlayer play];
}

// 停止ボタンの処理
- (IBAction)stop:(id)sender
{
    // 停止する
    [self.moviePlayer pause];
}

Chapter05-022までやった。ムービーをアプリで再生させる必要性を感じないのと、手元にムービー(アニメ)を作る環境がない(分からない)ので、ブラックジャック本体に組み込むところは飛ばした。

参考サイト

iPhoneソーシャルゲーム開発
林 晃
シーアンドアール研究所
売り上げランキング: 245996

関連エントリー

  1. iOSゲーム本”iPhoneソーシャルゲーム開発”の写経5:アニメーション処理
  2. iOSゲーム本”iPhoneソーシャルゲーム開発”の写経6:音声の再生
  3. iOSゲーム本”iPhoneソーシャルゲーム開発”の写経9:Game Centerでの認証
  4. iOSゲーム本”iPhoneソーシャルゲーム開発”の写経4:画像の表示
  5. iOSゲーム本”iPhoneソーシャルゲーム開発”の写経11:iPad対応
This entry was posted in 未分類 and tagged , . Bookmark the permalink.