我正在开发一个相当标准的基于导航的iPhone应用程序,在某些屏幕上,有一个按钮可以在全屏模式下使用MPMoviePlayerController播放电影。视图顶部有一个导航栏。我看到电影播放后视图大小的一些奇怪的行为。想知道是否有其他人看过这个,以及是否有修复。这就是我所看到的:
此时,原始视图以新方向返回到屏幕上。但是,视图的大小不适合容纳屏幕顶部的状态栏。状态栏遮盖了导航栏的一部分。此时旋转手机可以解决问题。
如果我按照相同的顺序,但没有隐藏播放控件,一切正常,当我关闭电影时原始视图的大小正确。
有人知道可能导致这种情况的原因吗?
此外,这似乎很容易重现。我正在使用Xcode4.2和5.0 SDK。如果您使用“Master-Detail Application”模板创建一个新的仅iPhone项目,并进行这些更改,您可以看到问题发生:
首先,将以下代码添加到MasterViewController.m。
- (void) moviePlayBackDidFinish:(NSNotification*)notification
{
MPMoviePlayerController *moviePlayer = [notification object];
[[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerPlaybackDidFinishNotification object:moviePlayer];
[moviePlayer.view removeFromSuperview];
[moviePlayer release];
}
- (void) playStory
{
NSURL *movieURL = [NSURL URLWithString:@"http://double-apps.com/thisisatest.m4v"];
MPMoviePlayerController *moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:movieURL];
// Register to receive a notification when the movie has finished playing.
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayBackDidFinish:) name:MPMoviePlayerPlaybackDidFinishNotification object:moviePlayer];
moviePlayer.shouldAutoplay = YES;
[self.view addSubview:moviePlayer.view];
[moviePlayer setFullscreen:YES animated:YES];
}
然后,用[self playStory]替换didSelectRowAtIndexPath方法的内容:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[self playStory];
}
就是这样,运行应用程序,点击主屏幕中的“详细信息”条目,然后按照上面列出的顺序。