swift 控制器横竖屏切换

能够实现的功能

1.启动页的屏幕方向任你选择
2.达到每个控制器都可以自由调整横竖屏方向.

建议

项目中最好用约束来实现界面的布局,因为屏幕发生旋转后控制器都会调用

  • viewWillLayoutSubviews
  • viewDidLayoutSubviews

这两个方法,所以通过约束可以实时的根据屏幕调整尺寸,而通过计算出来的frame是在 viewDidLoad 这个方法中计算出来的,屏幕旋转不会再次调用这个方法

1.在AppDelegate 中实现以下代理方法
- (UIInterfaceOrientationMask)application:(UIApplication *)application
  supportedInterfaceOrientationsForWindow:(UIWindow *)window

代理中已经返回了支持的反向,系统不会从.info中获取了


图片.png
2.在根控制器重写以下属性

在一个控制器第一次即将显示时会先调用appDelegate这个方法

- (UIInterfaceOrientationMask)application:(UIApplication *)application
  supportedInterfaceOrientationsForWindow:(UIWindow *)window

然后调用

- (UIInterfaceOrientationMask)supportedInterfaceOrientations
///设备支持的方向
- (BOOL)shouldAutorotate
///设备旋转方向后是否重新布局,更新尺寸

最后在调用appDelegate的方法

topViewController 是导航栏的栈顶控制器,push 进来的控制器
visibleViewController 是导航栏的可见控制器,

总之要知道优先级的问题,general == appDelegate >> rootViewController >> nomalViewController

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
/// 只在present 时会调用,
/// 这个方法优先级比supportInTerFace高,当这个方法支持的,supportInTerFace没有支持会造成崩溃
- (void)viewWillTransitionToSize:(CGSize)size 
withTransitionCoordinator:
(id)coordinator
当屏幕发生旋转时,就会触发这个方法

你可能感兴趣的:(swift 控制器横竖屏切换)