在iphone应用程序中,我创建了一个MPMoviePlayerController并指示它以全屏模式开始播放视频(我认为除了iPhone上的F / S模式之外没有任何其他选项,就像你可以在ipad上一样)。 / p>
一旦全屏播放器出现,整个屏幕都是黑色的,有时几秒钟内没有可见的控件(设置为MPMovieControlStyleDefault)。
在一两秒后,控件出现并显示视频的第一帧,然后视频开始缓冲并自动播放。
我已经尝试将其添加为电影播放器视图的子视图,即电影播放器的背景视图,作为电影播放器视图的超级视图的子视图(我当然没想到它会工作)。我认为这里的关键是F / S电影播放器视图与不在F / S模式下的电影播放器视图不同。是?有没有办法访问全屏视图?
2.如果玩家以全屏模式启动,应该能够更快地看到控件(使用DONE按钮)吗?当全屏电影播放器启动时,只有黑屏会有相当长的延迟,所以如果用户变得不耐烦,用户就无法点击完成按钮(因此唯一的其他选择是退出应用程序 - 更愿意提供选项如果他们想要取消播放。
提前致谢!
答案 0 :(得分:7)
如果您还没有这样做,请注册MPMoviePlayerLoadStateDidChangeNotification通知(http://developer.apple.com/library/ios/documentation/mediaplayer/reference/MPMoviePlayerController_Class/MPMoviePlayerController/MPMoviePlayerController.html#//apple_ref/ c / data / MPMoviePlayerLoadStateDidChangeNotification)并在呈现电影播放器之前等待MPMoviePlayerController的loadState更改为MPMovieLoadStatePlayable。
这样,您可以在自己的视图中显示活动指示器,直到电影准备好播放。 (请务必为用户提供取消等待电影的方法。)
理论上,你应该能够在MPMovewPlayerController的视图中添加一个活动指示器,但我从未尝试过这种方法,听起来它不适合你。
另一种选择是在现有活动指标下添加MPMoviePlayer视图。我成功地尝试了这个。
[moviePlayer setContentURL:trailer.downloadLink];
moviePlayer.fullscreen = YES;
moviePlayer.controlStyle = MPMovieControlStyleFullscreen;
[moviePlayer prepareToPlay];
[self.navigationController.view addSubview:self.activityIndicator];
self.activityIndicator.center = self.navigationController.view.center;
[self.activityIndicator startAnimating];
moviePlayer.view.frame = self.navigationController.view.bounds;
[self.navigationController.view insertSubview:moviePlayer.view belowSubview:self.activityIndicator];
以下是我的通知处理程序。
#pragma mark MPMoviePlayerController notifications
- (void)moviePlayerLoadStateChanged:(NSNotification *)notif
{
NSLog(@"loadState: %d", moviePlayer.loadState);
if (moviePlayer.loadState & MPMovieLoadStateStalled) {
[self.activityIndicator startAnimating];
[moviePlayer pause];
} else if (moviePlayer.loadState & MPMovieLoadStatePlaythroughOK) {
[self.activityIndicator stopAnimating];
[moviePlayer play];
}
}
- (void)moviePlayerPlaybackFinished:(NSNotification *)notif
{
[moviePlayer.view removeFromSuperview];
[self.activityIndicator stopAnimating];
}
答案 1 :(得分:0)
我不喜欢在屏幕中央显示活动指示器的事实,因为电影播放器已经拥有一个。我宁愿在顶部工具栏上显示它:
-(void)activityIndicatorAnimate :(int)action
{
if (action == 0) {
/* STOP ANIMATING ACTIVITY INDICATOR */
if (activityIndicator != nil) {
[[self navigationItem] setRightBarButtonItem:nil];
[activityIndicator stopAnimating];
[activityIndicator release];
activityIndicator = nil;
}
NSLog(@"Stop activityIndicator");
} else if (action == 1) {
/* START ANIMATING ACTIVITY INDICATOR */
if (activityIndicator == nil) {
activityIndicator = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(0, 0, 20, 20)];
UIBarButtonItem * barButton = [[UIBarButtonItem alloc] initWithCustomView:activityIndicator];
[[self navigationItem] setRightBarButtonItem:barButton];
[barButton release];
NSLog(@"Start activityIndicator");
}
[activityIndicator startAnimating];
}
}