0

在我的应用程序中,我仅支持纵向模式并UINavigationController用作RootViewController. 但是当我使用播放器播放电影MPMoviePlayerController并且播放器是全屏时,我希望它也支持这两种landscape模式。

在iOS6中使用@ChrisBallinger的这个伟大的代码,但它在谷歌上长时间搜索后无法工作,iOS5我无法找到这里发布的解决方案。请帮助解决这个问题。

我也尝试对它进行子类化并设置它在这里找到navigationcontroller的旋转代码,但没有运气。

4

2 回答 2

1

我的沙盒应用程序: https ://github.com/comonitos/programatical_device_orientation

解决方案很简单:

在界面(h文件)中:

    BOOL rotated;

在实现中(m 文件): 1. 重写

    -(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
    {
    return rotated;
    }

2 调用 [自我设置]

    -(void) setup { 
    rotated = YES; 
    [[UIDevice currentDevice] setOrientation:UIDeviceOrientationLandscapeLeft]; 
    rotated = NO; 
    }
于 2013-09-23T11:55:10.297 回答
-1

你要做的是……

首先在 viewdidload 方法中实现通知,如下所示...

    [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(rotate:)
                                             name:UIDeviceOrientationDidChangeNotification
                                           object:nil];

现在实现如下所示的旋转方法..

 #pragma mark - Rotate Screen Method
- (void)rotate:(NSNotification *)n {
//    if (!isFullScreen)
//        return;
switch ([[UIDevice currentDevice] orientation]) {
    case UIDeviceOrientationLandscapeLeft:
        playerView.transform = CGAffineTransformMakeRotation(M_PI / 2);//playerview is view in which  you have added MPMoviePlayerViewController object
        playerView.frame = CGRectMake(0, 0, 768, 1024);
        break;
    case UIDeviceOrientationLandscapeRight:
        playerView.transform = CGAffineTransformMakeRotation(-M_PI / 2);
        playerView.frame = CGRectMake(0, 0,768, 1024);
        break;
    case UIDeviceOrientationPortrait:
        playerView.transform = CGAffineTransformIdentity;
        playerView.frame = CGRectMake(0, 0, 768, 1024);
        break;
    case UIDeviceOrientationPortraitUpsideDown:
        playerView.transform = CGAffineTransformMakeRotation(M_PI);
        playerView.frame = CGRectMake(0, 0, 768, 1024);
        break;
    default:
        break;
}
}

让我知道它是否有效!

快乐编码!!!

于 2013-09-06T09:53:56.003 回答