iOS - 视频不能仅在iOS7上通过iPhone旋转?

时间:2013-09-30 12:12:54

标签: ios media-player ios7 mpmovieplayercontroller mpmovieplayer

我做了什么?

我正在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

4 个答案:

答案 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中正常运行。