当第一次创建MPMoviePlayerController(例如,theMovie)时,可以成功设置其initialPlaybackTime。但是当theMoive发布并重新创建一个新的MPMoviePlayerController时,其intialPlaybackTime无法正确设置,实际上电影总是从一开始就播放。代码如下。
-(void)initAndPlayMovie:(NSURL *)movieURL
{
MPMoviePlayerController *theMovie = [[MPMoviePlayerController alloc] initWithContentURL:movieURL];
// create a notification for moviePlaybackFinish
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayBackDidFinish:) name:MPMoviePlayerPlaybackDidFinishNotification object:theMovie];
theMovie.initialPlaybackTime = 15;
[theMovie setScalingMode:MPMovieScalingModeAspectFill];
[theMovie play];}
-(void) moviePlayBackDidFinish:(NSNotification*)notification
{
MPMoviePlayerController * theMovie = [notification object];
[[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerPlaybackDidFinishNotification object:theMovie];
[theMovie release];
[self initAndPlayMovie:[self getMovieURL]];
}
使用上面的代码,当viewcontroller加载并运行initAndPlayMovie时,电影从15秒开始播放,但是当它播放完毕或按下“Done”时,会创建一个新的theMovie并从0秒开始播放。有人知道MPMoviePlayerController的initialPlaybackTime属性发生了什么吗?
每当你重新加载上面代码所在的viewController(来自父视图控制器的presentModalViewController)时,电影可以从任何播放时间开始。我真的很困惑,在viewcontroller加载和释放后重新创建它之间的MPMoviePlayerController注册方法的区别是什么。
答案 0 :(得分:1)
问题已经解决了! 它需要一步才能正确进行initialPlaybackTime设置。
发布电影播放器后,再次开始播放前需要1秒延迟。确保完全释放电影播放器。
我花了3天时间才弄明白这个问题。但现在我的问题是如何检测电影播放器是否完全释放而不是等待一秒钟。
答案 1 :(得分:1)
释放theMovie后,给它一个值为零
[theMovie released];
theMovie = nil;
然后你可以判断它是否已经发布。
if (theMovie == nil){
//do something here when movie player is released already
}