iOS开发--屏幕旋转的问题

首先,在iOS中展示界面的方式有两种,push和modal
那么,在app中如果想要实现随心所欲的屏幕旋转,就要分两种情况来看
1,使用push,也就是说我们的控制器要嵌套在一个UINavigationController下来展示,我们需要以个继承了UINavigationController的子类来重写一下三个方法

- (BOOL)shouldAutorotate{
    return self.topViewController.shouldAutorotate;
}

- (UIInterfaceOrientationMask)supportedInterfaceOrientations{
    return self.topViewController.supportedInterfaceOrientations;
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation{
    return self.topViewController.preferredInterfaceOrientationForPresentation;
}

然后在相应的控制器里也要重写着三个方法,例如这样

- (BOOL)shouldAutorotate{
    return self.autoRotate;
}

- (UIInterfaceOrientationMask)supportedInterfaceOrientations{
    return self.mask;
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation{
    return self.orientation;
}

这里重写的目的是为了真正控制当前的屏幕方向
重写这三个方法也是做一个铺垫,真正发挥改变屏幕方向的代码是

    [[UIDevice currentDevice] setValue:@(UIDeviceOrientationLandscapeLeft) forKey:@"orientation"];

只有重写了前面的三个方法,上面的代码才会起作用
以上的步骤的确可以实现屏幕旋转,但是无论是modal还是push 我都发现还存在问题,modal 的情况下会偶发控制器的view 旋转了但是屏幕的方向没有变,push 的问题发生打概率更大一些,就是当从A到B变横屏,然后从B到C变竖屏,再从C返回B能够变回横屏,然后从B返回A也能变回竖屏,这时候再从Apush到B则不能变横屏,这是目前遇到的问题,记录下来,暂时留在这里,明天继续解决。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容