我做了什么?
我正在MPMoviePlayerViewController的扩展课程中播放视频,并实施了如下方向功能
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
if (toInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown){
return FALSE;
}
else{
return TRUE;
}
}
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
[self setControlsPositions:toInterfaceOrientation];
}
-(BOOL)shouldAutorotate
{
return YES;
}
我面临的问题是什么?
iPhone和iPad上的应用程序运行正常至iOS6(使用iOS7),但视频不会在安装了iOS7的iPhone上旋转。
此问题的原因是什么以及如何解决?
更新
我发现如果
setMovieSourceType
,视频会旋转 设置为MPMovieSourceTypeUnknown
但设置为时不旋转 `MPMovieSourceTypeStreaming
答案 0 :(得分:3)
苹果希望我给他们一个样本,告诉我在iOS-7中报告的错误,我发现我没有推动视图控制器,而是我正在将视图添加到窗口。
在这种情况下,其他视图控制器确实获得了方向事件,但MPMoviePlayerViewController
子类没有,所以我只是呈现了视图控制器,而不是添加它的视图,并且它起作用。
答案 1 :(得分:1)
试试这个解决方案:
在AppDelegate.h
:
@property (nonatomic, assign) BOOL *fullScreenVideoIsPlaying;
在AppDelegate.m
:
@synthesize fullScreenVideoIsPlaying;
- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window{
NSUInteger orientations = UIInterfaceOrientationMaskPortrait;
if (self.fullScreenVideoIsPlaying) {
return UIInterfaceOrientationMaskAllButUpsideDown;
}
else {
if(self.window.rootViewController){
UIViewController *presentedViewController = [[(UINavigationController *)self.window.rootViewController viewControllers] lastObject];
orientations = [presentedViewController supportedInterfaceOrientations];
}
return orientations;
}}
在你的ViewController:
viewDidLoad
方法中的:
myDelegate = (AppDelegate *) [[UIApplication sharedApplication] delegate];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(movieStarted:) name:@"UIMoviePlayerControllerDidEnterFullscreenNotification" object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(movieFinished:) name:@"UIMoviePlayerControllerWillExitFullscreenNotification" object:nil];
并在同一个类中添加这两个方法:
-(void) movieStarted:(NSNotification*) notif {
myDelegate.fullScreenVideoIsPlaying = YES;
}
-(void) youTubeFinished:(movieFinished*) notif {
myDelegate.fullScreenVideoIsPlaying = NO;
}
答案 2 :(得分:0)
使用iOS 6更改了旋转方法,您需要将iOS 6旋转方法添加到视图控制器:
- (BOOL)shouldAutorotate {
return YES:
}
- (NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskAllButUpsideDown;
}
您需要将Supported interface orientations
与支持的方向添加到您的应用info.plist
。
来自iOS 6.0 release信息:
UIViewController类具有支持以下内容的新接口 行为:
- 新界面为管理和跟踪界面轮换提供了更清晰的途径。
答案 3 :(得分:0)
我认为设备旋转在控制中心被锁定,因为它在ipad ios 7中正常运行。