ios屏幕旋转

在View中监听屏幕的旋转

  • 第一种方法,我们在view的生命周期的layoutSubviews方法中监听statusBarOrientation,达到监听屏幕的横竖屏状态
- (void)layoutSubviews

{

     [self _shouldRotateToOrientation:(UIDeviceOrientation)[UIApplication sharedApplication].statusBarOrientation];//这里推荐使用状态栏判断

}

-(void)_shouldRotateToOrientation:(UIDeviceOrientation)orientation {
   if (orientation == UIDeviceOrientationPortrait ||orientation ==
                UIDeviceOrientationPortraitUpsideDown) { // 竖屏

    } else { // 横屏

    }
}
  • 第二种方法,使用通知监听屏幕的横竖屏状态
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientChange:) name:UIApplicationDidChangeStatusBarOrientationNotification object:nil];

- (void)orientChange:(NSNotification *)notification{
UIInterfaceOrientation interfaceOritation = [[UIApplication sharedApplication] statusBarOrientation];

/*
statusBarOrientation   4种状态:
UIInterfaceOrientationUnknown            = UIDeviceOrientationUnknown,
UIInterfaceOrientationPortrait           = UIDeviceOrientationPortrait,
UIInterfaceOrientationPortraitUpsideDown = UIDeviceOrientationPortraitUpsideDown,
UIInterfaceOrientationLandscapeLeft      = UIDeviceOrientationLandscapeRight,
UIInterfaceOrientationLandscapeRight     = UIDeviceOrientationLandscapeLeft

*/
}

  • 第三种在控制器中如果想手动控制屏幕的旋转,如视频播放的横竖屏旋转,我们可以用以下方法来实现,使用这种方法要把
    这里的控制横竖屏的勾都取消掉
ios屏幕旋转_第1张图片
Snip20170916_4.png
class AppDelegate: UIApplicationDelegate{

//添加一个控制屏幕旋转的属性
var allowRotation : Bool = false

    ///横竖屏解决方案
    func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {
        if allowRotation == true {
            return .all
        }else{
            return .portrait
        }
    }
}


//在其他要旋转的控制器中只需要设置allowRotation的值就可以了

        // 用appdelegate来控制设备的旋转
        let appdelegate = UIApplication.shared.delegate as! AppDelegate
        appdelegate.allowRotation = true


    // MARK:-----屏幕旋转---------------
    override var shouldAutorotate: Bool {
        return true
    }

    override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
        if player.isLocked {
            return .landscape
        } else {
            return .all
        }
    }



你可能感兴趣的:(ios屏幕旋转)