
之前方案
-(void)play{
if (self.oldTime != 0 ) {
[self setCurrentPlaybackTime:self.oldTime];
}
[super play];
}
複製程式碼
之前處理的就是在點選開始播放的時候判斷有沒有記憶點,如果有就跳轉到記憶點,然後在開始播放,但是問題就是當網速不是很好的情況下 setCurrentPlaybackTime: 這個有可能會跳轉不到記憶點或者跳轉需要一段時間的緩衝,在setCurrentPlaybackTime: 的動作還沒有成功之後就 play ,就會出現播放是從0開始的,不能跳轉到記憶點開始播放。當時想的是 setCurrentPlaybackTime: 怎麼能找到這個方法的成功回撥,在成功回撥裡在寫開始播放,後來發現沒有,又嘗試了在播放器初始化完成之後(MPMoviePlayerReadyForDisplayDidChangeNotification)就執行setCurrentPlaybackTime:動作,後來發現也不行也會出現跳不到的情況
可行方案
雖然 在 MPMoviePlayerReadyForDisplayDidChangeNotification 裡面寫不行,但是卻給了一種方案,就是在 MPMoviePlayerController 裡這些通知回撥裡面處理也許可行,對相信你也猜到了 onMPMoviePlayerPlaybackStateDidChangeNotification 播放器狀態發生改變的時候
- (void)onMPMoviePlayerPlaybackStateDidChangeNotification
{
if (self.playbackState == MPMoviePlaybackStatePlaying) {
[self startDurationTimer];
if (_oldTime > 0) {
[super setCurrentPlaybackTime:_oldTime];
_oldTime = 0;
}
} else {
[self stopDurationTimer];
}
}
複製程式碼
測試發現這樣做是可行的,希望可以幫到有同樣問題的你。