代码之家  ›  专栏  ›  技术社区  ›  Adam Alexander

使用MPMoviePlayerViewController时出现iPad旋转错误

  •  10
  • Adam Alexander  · 技术社区  · 14 年前

    问题摘要

    在使用mpmovieplayervewcontroller播放视频时,更改iPad设备或模拟器的方向会导致在关闭视频播放器时出现不一致的旋转状态。这是ipadsdk3.2中的一个已知bug,在 http://www.openradar.me/8012810

    示例项目

    我使用xcode3.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];
    

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

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

    我已经联系了苹果公司,他们已经确认这是一个正在调查的错误。我想讨论使用公共api安全提交到appstore的临时解决方法。我也要和苹果一起开一个开发者支持的案例,并且会用我自己的进度报告回来。

    2 回复  |  直到 14 年前
        1
  •  15
  •   Community pid    4 年前

    苹果开发者技术支持的成功回应!

    这是一个已知的bug,我们收到了大量重复的bug报告,因此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 对于应用了修复的代码。

        2
  •  0
  •   John Ure    14 年前

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

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

    非常感谢你报告这个错误-我以为这只是我的错误代码。。。