奇怪的 MPMoviePlayerController 视图旋转/动画...
Posted
技术标签:
【中文标题】奇怪的 MPMoviePlayerController 视图旋转/动画...【英文标题】:Strange MPMoviePlayerController view rotation/animation... 【发布时间】:2012-10-09 15:16:23 【问题描述】:我有一个 MPMoviePlayerController,它使用默认控件在一个小框架内播放视频。如果我按下媒体播放器控件上的“全屏”按钮,一切正常 - 视频仍在播放。 视频结束后,我想关闭全屏视图并返回非全屏视图控制器。
我的应用程序仅是横向的。我已经测试了“setFullscreen”属性以在调用 MPMoviePlayerPlaybackDidFinishNotification 时切换回来——这有效。但是出现了从纵向到横向的视图旋转,这是错误的。我只需要风景到风景。
你知道为什么会这样吗?
self.moviePlayerController = [[MPMoviePlayerController alloc] initWithContentURL:fileURL];
[self.moviePlayerController prepareToPlay];
[self.moviePlayerController setShouldAutoplay:YES];
self.moviePlayerController.movieSourceType = MPMovieSourceTypeFile;
self.moviePlayerController.fullscreen = NO;
self.moviePlayerController.scalingMode = MPMovieScalingModeAspectFit;
self.moviePlayerController.controlStyle = MPMovieControlStyleEmbedded;
[self.moviePlayerController.view setFrame: someMovieFrame];
[tempImageScrollView addSubview:self.moviePlayerController.view];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlaybackCompletePSV:)
name:MPMoviePlayerPlaybackDidFinishNotification
object:self.moviePlayerController];
[self.moviePlayerController play];
- (void) moviePlaybackCompletePSV:(NSNotification*) notification
MPMoviePlayerController *mymoviePlayerController = [notification object];
[[NSNotificationCenter defaultCenter] removeObserver:self
name:MPMoviePlayerPlaybackDidFinishNotification
object:mymoviePlayerController];
NSLog(@"PSV moviePlaybackComplete!");
// movie fadeout transition ====================
self.moviePlayerController.view.alpha = 1;
[UIView animateWithDuration:0.3f delay:0.0 options:UIViewAnimationCurveEaseOut
animations:^
self.moviePlayerController.view.alpha = 0;
if ([self.moviePlayerController isFullscreen])
NSLog(@"PSV fullscreen movieplayer deleted");
[self.moviePlayerController setFullscreen:NO animated:NO];
completion:^(BOOL finished)
[mymoviePlayerController stop];
[mymoviePlayerController.view removeFromSuperview];
[self.moviePlayerController.view removeFromSuperview];
self.moviePlayerController = nil;
];
【问题讨论】:
【参考方案1】:当电影播放器全屏时,你的父视图控制器的viewWillDisappear
/viewDidDisappear
被调用,当它恢复正常大小时,你的父视图控制器的viewWillAppear
/viewDidAppear
被调用。
听起来这些方法中的某些内容无意中被调用了两次。
如果这还不足以回答您的问题,请在您的父控制器中发布适当的方法。
【讨论】:
感谢 Aaron,我刚刚查看了父视图控制器,但 viewWill/DidAppear 方法中没有关于视图或大小的信息。我刚刚还在 ios5 iPad 1 上测试了该应用程序。奇怪的是,在这个设备上,一切都很好 - 没有(纵向到横向)旋转。那么iOS6依赖什么?有什么想法吗? 我刚刚对包含电影播放器的新 iOS6 VC 方法“supportedInterfaceOrientations”和“preferredInterfaceOrientationForPresentation”实现了横向旋转。还是一样的轮换问题。希望有人可以帮助我..【参考方案2】:iOS 6 对设备的旋转和方向处理进行了一些更改。在此处查看更多信息:http://developer.apple.com/library/ios/#releasenotes/General/RN-iOSSDK-6_0/_index.html%23//apple_ref/doc/uid/TP40012166-CH1-SW19
首先将您的电影播放器需要支持的所有方向添加到您的.plist
中的字段Supported interface orientations
(或创建此字段,如果错过)。
在您的情况下,您可能使用了UInavigationController
或UITabbarController
作为根视图。如果是这样,让我们尝试对它们进行子类化并覆盖这些方法(如果您使用 UIViewController
作为 root 只需在 .m
文件中覆盖它们):
:
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
return UIInterfaceOrientationLandscapeLeft;
- (BOOL)shouldAutorotate
return NO;
- (NSUInteger)supportedInterfaceOrientations
return UIInterfaceOrientationMaskLandscape;
接下来将以下方法添加到您的 MPMoviePlayerController
's.m
文件中:
- (BOOL)shouldAutorotate
return YES;
- (NSUInteger)supportedInterfaceOrientations
return UIInterfaceOrientationMaskAll;
试试吧,希望能成功。
【讨论】:
以上是关于奇怪的 MPMoviePlayerController 视图旋转/动画...的主要内容,如果未能解决你的问题,请参考以下文章