iOS 6 MPMoviePlayerViewController 和 presentMoviePlayerViewControllerAnimated Rotation
Posted
技术标签:
【中文标题】iOS 6 MPMoviePlayerViewController 和 presentMoviePlayerViewControllerAnimated Rotation【英文标题】:iOS 6 MPMoviePlayerViewController and presentMoviePlayerViewControllerAnimated Rotation 【发布时间】:2012-09-26 01:58:35 【问题描述】:在以前的 ios 版本中,我们的视频会自动旋转,但在 iOS 6 中,情况不再如此。我知道 presentMoviePlayerViewControllerAnimated 之前就是为此设计的,但我如何才能告诉 MPMoviePlayerViewController 自动旋转?
MPMoviePlayerViewController *moviePlayer = [[MPMoviePlayerViewController alloc] initWithContentURL:url];
[self presentMoviePlayerViewControllerAnimated:moviePlayer];
【问题讨论】:
可能复制到***.com/questions/12526054/…。其实那个问答很好地谈到了这个问题。 【参考方案1】:在 appdelegate.m 中:
- (NSUInteger) application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
if ([[self.window.subviews.lastObject class].description isEqualToString:@"MPMovieView"])
return UIInterfaceOrientationMaskAllButUpsideDown;
else
return UIInterfaceOrientationMaskPortrait;
有点破解,但效果很好......
【讨论】:
旁注: 这是针对 iOS 6+ 的。对于 iOS 5 或更低版本,请使用类似于UIInterfaceOrientationPortrait
的代码
当我开始一部电影时,我会返回一个描述; 'UITransitionView' 为什么会这样?它与我的视图控制器返回的名称相同【参考方案2】:
我刚刚遇到了同样的问题。 James Chen 的解决方案是正确的,但我最终做了一些更简单但也有效的事情 - 在我的应用程序委托中覆盖 application:supportedInterfaceOrientationsForWindow 并返回 allButUpsideDown 如果我的 rootView 控制器以模态方式呈现 MPMoviePlayerViewController。不可否认,这是一种 hack,可能并不适用于所有情况,但让我不必更改所有视图控制器:
- (NSUInteger) application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
return [rootViewController.modalViewController isKindOfClass:MPMoviePlayerViewController.class ] ? UIInterfaceOrientationMaskAll : UIInterfaceOrientationMaskAllButUpsideDown;
【讨论】:
您好 Jon,首先感谢您的回答。你已经解决了我同样的 MPMoviePlayerViewController 旋转问题但是当我关闭电影播放器时,我仍然在 rootViewController.modalViewController 中获得 MPMoviePlayerViewController。我试过了:[self dismissModalViewControllerAnimated:YES];和 [movieControllerdismissMoviePlayerViewControllerAnimated];【参考方案3】:这不仅限于MPMoviePlayerViewController
。从 iOS 6 开始,自动旋转已更改。见Autorotate in iOS 6 has strange behaviour。
要使您的应用程序表现得像 iOS 6 之前的版本,您必须使应用程序支持所有方向(在 plist 中编辑 UISupportedInterfaceOrientations
),然后对于所有其他不支持旋转的视图控制器,重写此方法以返回否:
- (BOOL)shouldAutorotate
return NO;
默认情况下MPMoviePlayerViewController
支持所有方向,所以这应该足以让它工作。
【讨论】:
我更改了我的 plist 文件以允许所有方向,但它没有任何影响。无论方向如何,我的应用程序仍保持纵向模式。我通过代码搜索高低,看看是否有东西阻止旋转,但我什么也没看到。任何想法。 @JamesChen 就是这样!如此简单,节省了我挖掘的时间!以上是关于iOS 6 MPMoviePlayerViewController 和 presentMoviePlayerViewControllerAnimated Rotation的主要内容,如果未能解决你的问题,请参考以下文章
在 iOS 6.0 和 iOS 6.0.1 上调用 [FBSession openActiveSessionWithPermissions...] 时从 ACAccountStore 抛出 NSInv
为啥我的弹出框在 iPhone 6 Plus 上的 iOS 8.1 中崩溃? iOS 8 工作(实际上是 Xcode 6.0 到 6.1 的错误)