私はアプリに入れる長い映画を持っています、そして私はユーザーを彼らが中断したところに戻すための最良の方法を知りたいと思いました。誰かが私を正しい方向に向けることができますか?
それで、ユーザーが映画を見ていて、ヒットした場合、現在の時刻の通知、またはその時刻でインスタンスを保存して再度ロードできる何かがありますか?
ありがとう!
私はアプリに入れる長い映画を持っています、そして私はユーザーを彼らが中断したところに戻すための最良の方法を知りたいと思いました。誰かが私を正しい方向に向けることができますか?
それで、ユーザーが映画を見ていて、ヒットした場合、現在の時刻の通知、またはその時刻でインスタンスを保存して再度ロードできる何かがありますか?
ありがとう!
プライベートAPIコンポーネントを使用しないOS3.0テクニックを見つけました。
MPAVControllerTimeDidJumpNotification通知を受信するように登録し、その通知のuserInfoディクショナリからMPAVControllerTimeParameterNSNumberを取得できます。
たとえば、再生を開始する直前に、通知を受信するように登録します。
#define MPAVControllerTimeDidJumpNotification @"MPAVControllerTimeDidJumpNotification"
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleTimeChanged:) name:MPAVControllerTimeDidJumpNotification object:nil];
次に、ムービーの再生を開始します。映画の再生中に変更されるたびに呼び出されるメソッドを追加します。
-(void)handleTimeChanged:(NSNotification *)notification
{
NSDictionary * userInfo = notification.userInfo;
int lastPositionInSeconds = [[userInfo valueForKey:@"MPAVControllerTimeParameter"] intValue];
NSLog( @"Last time was %d", lastPositionInSeconds );
}
そして、映画の再生が停止したら(MPMoviePlayerPlaybackDidFinishNotification通知をリッスンすることでこれを知ることができます)、MPAVControllerTimeDidJumpNotification通知のリッスンを停止します。
この質問は、ここにある他の次の質問と重複しているか、関連しています。
これらの質問からの回答を繰り返すために、特定のフレームまたは時点で映画を開始するための現在のパブリックAPIはありません。利用可能なプライベートAPI(-currentTime
および-setCurrentTime
)がありますが、それらは変更される可能性があり、承認プロセス中にアプリが拒否されます。
`NSDictionary * userInfo = notification.userInfo;
int lastPositionInSeconds = [[userInfo valueForKey:@"MPAVControllerTimeParameter"] intValue];
`// saving an NSInteger
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
[prefs setInteger:lastPositionInSeconds forKey:@"currentMovieTime"];
// getting an NSInteger
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
NSInteger myInt = [prefs integerForKey:@"currentMovieTime"]; // default is zero if nil
currentMovieTime = myInt;
self.streamMoviePlayer.initialPlaybackTime = currentMovieTime;
これを使用して変数を設定/取得し、それを使用して適切なタイミングでムービーを開始できます。これは、ユーザーが電話を再起動したり、アプリケーションを再起動したりしても機能します。
スラヴァ、
私は実際に、映画の再生中にシステムによって発生するすべてのイベントを監視しましたが、役立つ可能性のあるものは他にありませんでした。そのMPAVControllerTimeDidJumpNotificationは、再生中に定期的に発生しますが、たとえば1秒ごとほど頻繁には発生しません。キーフレームごとに起動される可能性がありますが、それについてはよくわかりません。