15

我做了什么?

我在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 Almong 与 iPad(与 iOS7)上都可以正常工作,但在安装了 iOS7 的 iPhone 上视频不会旋转。

此类问题的原因是什么以及如何解决?

更新

我发现如果设置为 `MPMovieSourceTypeStreaming,视频会旋转setMovieSourceTypeMPMovieSourceTypeUnknown不会旋转

4

4 回答 4

3

在苹果希望我给他们一个关于我在 iOS-7 中报告的错误的示例之后,我发现我没有推送视图控制器,而是将视图添加到窗口。在这种情况下,其他视图控制器确实获得了方向事件,但MPMoviePlayerViewController子类没有,所以我只是展示了视图控制器而不是添加它的视图并且它起作用了。

于 2014-06-10T05:48:21.063 回答
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;
    }}

在您的视图控制器:

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;
}
于 2013-11-25T07:55:35.657 回答
0

我认为设备旋转被锁定在控制中心,导致它在 ipad ios 7 中运行良好。

于 2014-03-14T19:22:27.640 回答
0

iOS 6 更改了旋转方法,您需要将 iOS 6 旋转方法添加到视图控制器:

- (BOOL)shouldAutorotate {
    return YES:
}

- (NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskAllButUpsideDown;
}

并且您需要将Supported interface orientations支持的方向添加到您的应用程序info.plist中。

来自iOS 6.0 的发布信息:

UIViewController 类具有支持以下行为的新接口:

  • 新界面为管理和跟踪界面轮换提供了更清晰的路径。
于 2013-09-30T12:18:03.143 回答