我有一个简单的视图,当用户按下按钮时,使用presentMoviePlayerViewControllerAnimated:方法创建一个MPMoviePlayerViewController。到目前为止,新的视图控制器可以滑入并显示电影播放器。
然而,当按下按钮时,当前视图控制器从底部滑出,显示一个丑陋的(可能是默认的)白色视图,它会在半秒到几秒钟的任何地方停留,直到显示电影视图控制器。看起来它依赖于我的网络连接,就像电影视图控制器在显示播放器之前正在下载部分电影一样。
我做错了什么,或者我该如何解决这个问题?我真的更喜欢直接显示电影视图控制器,甚至可能没有滑出保存播放按钮的前一个视图控制器,但仍然像模态视图控制器一样动画。
谢谢!
了Christoph
答案 0 :(得分:0)
解决方案是在创建父视图时初始化播放器视图控制器,然后在其中的prepareToPlay
上调用moviePlayer
。这可以消除按下播放按钮时的延迟,并且(我猜)当用户到达可以播放电影的父视图时将其移动到。
编辑: 这消除了延迟,但由于某种原因,初始化电影视图控制器也会在加载时自动播放它,因此这不是一个好的解决方案。
答案 1 :(得分:0)
我最终只是将视图的背景设置为黑色。不能解决延迟,但会使它看起来更好:
theMovieVC.view.backgroundColor = [UIColor blackColor];
答案 2 :(得分:0)
这就是我为iOS做的事情> 3.2:
- (void) play {
mMoviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:mMovieURL];
if ([mMoviePlayer respondsToSelector:@selector(loadState)])
{
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(moviePreloadDidFinishIOS32:)
name:MPMoviePlayerContentPreloadDidFinishNotification
object:nil];
[mMoviePlayer prepareToPlay];
[mMoviePlayer play];
mMoviePlayer.controlStyle = MPMovieControlStyleEmbedded;
[mMoviePlayer setMovieControlMode:MPMovieControlModeDefault];
[mMoviePlayer setBackgroundColor:[UIColor clearColor]];
}
}
和
- (void) moviePreloadDidFinishIOS32:(NSNotification*)notification;
{
// Remove observer
[[NSNotificationCenter defaultCenter]
removeObserver:self
name:MPMoviePlayerContentPreloadDidFinishNotification
object:nil];
self.view = mMoviePlayer.view;
}
因此,在viewdidload中,您可以实例化您想要的内容(例如UIActivityIndicatorView)。视图控制器仅在预加载完成后才会被替换。
答案 3 :(得分:0)
我在我的应用中注意到同样的问题。有人建议避免这个问题吗?
就我而言,我正在将MPMoviePlayerViewController作为模式弹出窗口推送到UI。
// build the movie player
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
MPMoviePlayerViewController *movieViewController = [[[MPMoviePlayerViewController alloc] initWithContentURL:request.URL] autorelease];
[movieViewController.moviePlayer prepareToPlay];
movieViewController.view.backgroundColor = [UIColor blackColor];
// show the movie player view
[self.parentViewController presentModalViewController:movieViewController animated:YES];