前言
大家或许在iOS程序开发中经常遇到屏幕旋转问题,比如说希望指定的页面进行不同的屏幕旋转,但由于系统提供的方法是导航控制器的全局方法,无法随意的达到这种需求。一般的解决方案是继承UINavrgationViewController,重写该类的相关方法,这样虽然也能解决问题,但是在重写的过程中至少产生两个多余的文件和不少的代码,这显然不是我们想要的。下面就使用一种较底层的方法解决这个问题。
基本原理
动态的改变UINavrgationViewController的全局方法,将我们自己重写的supportedInterfaceOrientations、shouldAutorotate方法和导航控制器对象的方法进行替换即可。
准备工作
配置项目支持方向
代码实现
将下面的方法写在所有视图控制器的父类的viewDidLoad方法中,即可完成屏幕旋转方向的配置。
//获取当前视图控制器的旋转支持方法 Method selfMtihod = class_getInstanceMethod([self class], @selector(shouldAutorotate)); //获取当前导航控制器的旋转支持方法 Method navr = class_getInstanceMethod([self.navigationController class], @selector(shouldAutorotate)); //交换方法 method_exchangeImplementations(selfMtihod, navr); //以下同理 Method selfOrientation = class_getInstanceMethod([self class], @selector(supportedInterfaceOrientations)); Method navrOrientation = class_getInstanceMethod([self.navigationController class], @selector(supportedInterfaceOrientations)); method_exchangeImplementations(selfOrientation, navrOrientation);
使用方法
在上面的父类中重写supportedInterfaceOrientations、shouldAutorotate,表示默认的屏幕旋转相关属性。
在之后的每个该试图控制器的子类中,可重写supportedInterfaceOrientations、shouldAutorotate方法,即可完成指定视图控制器方向的需求。
以上所述是小编给大家介绍的Runtime解决屏幕旋转问题的方法详解,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的,在此也非常感谢大家对小牛知识库网站的支持!
我想在模拟器上测试手机的旋转,我看到我们必须使用CtrlF11的所有地方,但它只旋转模拟器的图像,不会启动配置更改事件或重新绘制活动。 下面是我用CtrlF11得到的: 那么,我必须用什么来模拟真实的旋转呢?
本文向大家介绍Android 屏幕横竖切换详解,包括了Android 屏幕横竖切换详解的使用技巧和注意事项,需要的朋友参考一下 Android 屏幕横竖切换 Android 里面控制Activity的方向,只要在AndroidManifest.xml里面对应的Activity节点下加一句 android:screenOrientation="landscape"(landscape是横屏,port
我有一个应用程序小部件,当它更新时,获取具有与小部件匹配的维度的图像,并将该图像放入(通过)。它工作得很好。 但是对于支持主屏幕旋转的设备(我不是说基于设备方向的
本文向大家介绍解决Android手机屏幕横竖屏切换,包括了解决Android手机屏幕横竖屏切换的使用技巧和注意事项,需要的朋友参考一下 Android中当屏幕横竖屏切换时,Activity的生命周期是重新加载(说明当前的Activity给销毁了,但又重新执行加载), 怎么使屏幕横竖屏切换时,当前的Activity不销毁呢? 1. 在AndroidManifest.xml中为Activity设置co
实现在竖屏的NavigationController中push一个横屏的UIViewController,模拟器测试兼容5.0、6.0系统。实现程序中手动旋转屏幕的效果。 [Code4App.com]
本文向大家介绍Android截屏SurfaceView黑屏问题的解决办法,包括了Android截屏SurfaceView黑屏问题的解决办法的使用技巧和注意事项,需要的朋友参考一下 最近项目中有截屏的需求,普通的view截屏方法网上一搜一大把,但是SurfaceView截屏黑屏问题很多文章说的并不清楚,自己参考了一些别的博客,再加上自己的思考,算是找到了一种解决方案。 1、首先看我们一般是怎么用Su