iOS的屏幕旋转学习笔记(orientation)

由于项目的需要,在播放视频的ViewController中需要支持横屏旋转播放器,故重新写了一下整个app的控制。

开始吧,首先保证一下自己的项目是支持三个方向的旋转的。

在iPad中,苹果默认支持四个方向的旋转;在iPhone中,苹果默认只支持3中方向(建议按照套路来)

这里明确一下,相信大家做项目的时候都已经有一种意识,就是在开始项目的时候,都配备了 BaseViewController、BaseNavigationController 这两个最基础的类以供所有的ViewController,NavigationController继承。

额:如果没有,建议尽快添加 :-D

只要项目支持三个方向的旋转,不添加任何代码的情况下,app在手机旋转的时候就会自动旋转的。

在BaseNavigationController增加下面两个方法:


- (BOOL)shouldAutorotate {

    if (self.topViewController != nil) {
        //如果当前有VC,获取VC里面的shouldAutorotate
        return [self.topViewController shouldAutorotate];

    }

    return [super shouldAutorotate];

}

- (UIInterfaceOrientationMask)supportedInterfaceOrientations {

    if (self.topViewController != nil) {
        //如果当前有VC,获取VC里面的supportedInterfaceOrientations
        return [self.topViewController supportedInterfaceOrientations]; 

    }

    return [super supportedInterfaceOrientations];

}

在BaseViewController增加下面两个方法:

- (BOOL)shouldAutorotate {
    //这里需要返回YES 
    // 如果你的项目仅仅在某个VC里面支持横屏,其他都不支持的话,这里也需要返回YES
    return YES;      
}

- (UIInterfaceOrientationMask)supportedInterfaceOrientations {
    //如果你的项目仅仅在某个VC里面支持横屏,其他都不支持的话,这里也需要返回UIInterfaceOrientationMaskPortrait
    //而如果你的项目每一个页面都需要支持横屏,这里返回UIInterfaceOrientationMaskAllButUpsideDown就可以了
    return UIInterfaceOrientationMaskPortrait;
}

现在的代码代表是项目所有页面都只支持一个方向Portrait,不支持横屏。
如果你现在新建一个需要横屏的LandscapeViewController,则你只需要在 LandscapeViewController.h 继承BaseViewController

@interface LandscapeViewController : BaseViewController

在LandscapeViewController.m 里面 增加

#pragma mark 开放横屏切换
- (BOOL)shouldAutorotate {
    return YES;
}

- (UIInterfaceOrientationMask)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskAllButUpsideDown;
}

现在就实现了在整个项目中 仅仅LandscapeViewController这个VC能旋转。

你可能感兴趣的:(iOS的屏幕旋转学习笔记(orientation))