iOS 5.0〜5.1.1のiPhone 3GSと、iPod touchにおいて、
[c][self.player setRepeatMode:MPMovieRepeatModeOne];[/c]
による動画のリピート再生が動作しませんでした。
iOS Simulatorと、iPad 3では問題無くリピート再生されるので、機種依存の問題のようです。
仕方ないので、次のようにNotificationを受け取って、リピートする形にしました。
1. Notificationを受け取る設定
[c][[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(moviePlayerDidFinish:)
name:MPMoviePlayerPlaybackDidFinishNotification
object:self.player];[/c]
2. Notificationの受け取り
[c]- (void)moviePlayerDidFinish:(NSNotification *)notification {
[self play];
}[/c]
しかし、これでも動きませんでした。
色々と試したところ、Notificationを受け取った後、
すぐにplayメソッドを呼んでも反応しない仕様のようでした。
そこで、次のように0.02秒間待機した後playメソッドを呼ぶと、
少しカクつくものの、リピートできました。
[c]- (void)moviePlayerDidFinish:(NSNotification *)notification {
double delayInSeconds = 0.02f;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
[self.player play];
});
}[/c]
ちなみに、次のコードでもリピートできます。
NSLogを呼んでいる間に、0.02秒経つのでしょう。
[c]- (void)moviePlayerDidFinish:(NSNotification *)notification {
NSLog(@"Repeat");
[self play];
}[/c]
この不思議な仕様、iOS 6では改善して欲しいものです。