こんにちは。陽気なシステム屋のがおまるです。
今日は13日の金曜日って事ですので、
JSON(ジェイソン)の話をしようと思いましたが諦めましたw
詳しくはググってください。
さて、本題ですがiOSの機能でNSNotificationCenterというものがあります。
NSNotificationCenterを使用すると、
同じアプリ内の別クラスでイベントを通知する事が出来ます。
例えば、「動画を表示した」というイベントを受けて閲覧回数を記録したり、
「動画再生完了した」というイベントを受けて動画終了処理を行ったりと様々な通知があります。
しかし、こんな便利な機能でもiOSのバージョンによって動作が異なることがあったので、
同じ問題で困っている人が出てこないように私が行った対策を書こうと思います。
問題が発生したのは、動画を表示させるアプリで発生しました。
iOS8で確認したところ動画が表示されるタイミングで送られてくるはずの通知が来ず
困惑してしまいました。
対策の使用例は以下の通りです。
// iOSバージョン取得 float osVersion = [[[UIDevice currentDevice] systemVersion] floatValue]; if (osVersion >= 8.0f) { //iOS8以降 //プレーヤ開始時(フルスクリーン状態になった時) [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(movieIsPlaying:) name:@"AVPlayerItemBecameCurrentNotification" object:nil]; // プレーヤ停止時 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(movieStoppedPlaying:) name:@"UIWindowDidBecomeHiddenNotification" object:nil]; } else { //iOS7 以下 //プレーヤ開始時(フルスクリーン状態になった時) [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(movieIsPlaying:) name:@"UIMoviePlayerControllerDidEnterFullscreenNotification" object:nil]; // プレーヤ停止時 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(movieStoppedPlaying:) name:@"UIMoviePlayerControllerDidExitFullscreenNotification" object:nil]; } // 動画再生処理 - (void)movieIsPlaying:(NSNotification *)notification { NSLog(@"start player"); } // 動画停止処理 -(void)movieStoppedPlaying:(NSNotification *)notification { NSLog(@"stop player"); }
イベントのまとめです。
他にもあるかもしれないですが…
// 動画再生
AVPlayerItemBecameCurrentNotification
// 動画完全再生終了
AVPlayerItemDidPlayToEndTimeNotification
// 動画再生
UIWindowDidBecomeVisibleNotification
// フルスクリーン閉じる
UIWindowDidBecomeHiddenNotification
OSのバージョンで処理が変わってしまうのは辛いですね(´Д⊂ヽ)
しかも今まで動いていた部分とかだとテストが疎かになったりして気が付きにくいです。。。
以上、NSNotificationCenterのお話でした!
弊社の開発実績はこちら