使用MPMoviePlayerViewController时的iPad旋转错误

时间:2010-06-22 01:48:05

标签: iphone objective-c cocoa-touch ipad

问题摘要

使用MPMoviePlayerViewController播放视频时更改iPad设备或模拟器的方向会导致在解除视频播放器时出现不一致的旋转状态。这是iPad SDK 3.2中的一个已知错误,记录在http://www.openradar.me/8012810

示例项目

我使用Xcode 3.2.2中基于视图的应用程序模板准备了一个最小的示例项目,使用以下代码启动播放器

NSURL *movieUrl = [NSURL URLWithString:@"http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8"];
MPMoviePlayerViewController *player = [[MPMoviePlayerViewController alloc] initWithContentURL:movieUrl];
[self presentMoviePlayerViewControllerAnimated:player];
[player release];

该代码可在http://github.com/adamalex/FullScreenMovie的GitHub上获得,或使用http://github.com/adamalex/FullScreenMovie/zipball/master直接下载

重现的步骤

  1. 使用上述信息获取项目
  2. 使用iPad模拟器或设备启动项目
  3. 点按按钮开始播放视频
  4. 将iPad旋转90度
  5. 关闭视频
  6. 请注意,UIStatusBar与应用程序UI不同步
  7. 目的

    我已与Apple联系,他们已经确认这是一个正在调查的错误。我想讨论使用公共API安全提交到App Store的临时解决方法。我将与Apple一起开设一个开发人员支持案例,并将以我自己的进展报告。

2 个答案:

答案 0 :(得分:15)

Apple Developer Technical Support的成功回复!

  

这是一个已知的错误,我们收到了大量重复的错误报告,因此iOS工程师知道这个问题,我们确实有iOS工程建议的临时解决方法。

     

您需要在呈现电影播放器​​的视图控制器中实现此功能。

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
   [super didRotateFromInterfaceOrientation:fromInterfaceOrientation];
   [self performSelector:@selector(fixStatusBar) withObject:nil afterDelay:0];
}

- (void)fixStatusBar {
   [[UIApplication sharedApplication] setStatusBarOrientation:[self interfaceOrientation] animated:NO];
}
  

虽然这有点难看,但现在应该解决这个问题。一旦在系统中修复了错误,建议删除此代码。

这完全解决了我的问题,您可以通过应用修补程序重新访问代码http://github.com/adamalex/FullScreenMovie

答案 1 :(得分:0)

这也解决了我正在努力解决的iPhone / iPodTouch轮换问题。我正在开发一个通用应用程序,其中每个视图显示不同的图像,具体取决于设备是纵向还是横向。按钮用于在视图之间导航。

如果应用程序在设备上运行并且纵向视图旋转为横向,则会进行图像切换。如果然后将设备平放在桌面上并轻触按钮以显示下一个视图,则视图将以横向显示,但会显示纵向图像。我通过检测面部向上和向下强制纵向视图来解决问题,但Apple的代码解决了这个问题(以及我也遇到的类似电影问题)。

非常感谢您报告错误 - 我认为这只是我糟糕的编码......