目前我们常用的iOS应用,大部分都是只支持竖屏。但是在某些View Controller中,我们想让应用支持横屏。经过查阅资料,总结出比较理想的实现步骤,如下:
1. 这三个支持的屏幕方向要勾上
General.png2. 在AppDelegate
中,声明一个属性shouldAutorotate
,默认为false
,并且实现func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask
方法,如下:
var shouldAutorotate = false
func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {
if shouldAutorotate {
return .allButUpsideDown
} else {
return .portrait
}
}
3. 在想要支持横屏的View Controller中:
// 1. 定义一个方法,控制是否要自动旋转
func allowAutorotate(allowed: Bool) {
let appDelegate = UIApplication.shared.delegate as? AppDelegate
appDelegate?.shouldAutorotate = allowed
}
// 2. 在viewDidLoad,允许自动旋转
override func viewDidLoad() {
super.viewDidLoad()
allowAutorotate(allowed: true)
}
// 3. 在deinit,禁止自动旋转
deinit {
allowAutorotate(allowed: false)
}
// 4. 重写支持的屏幕方向 (可以不写)
override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
return .allButUpsideDown
}
原理:在屏幕旋转时,系统会去读取AppDelegate
中func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask
和ViewController
中supportedInterfaceOrientations
返回的UIInterfaceOrientationMask
,并把这两个返回集合的交集作为最终的屏幕支持的方向。
有任何问题,欢迎大家留言!
欢迎加入我管理的Swift开发群:536353151
,本群只讨论Swift相关内容。
原创文章,转载请注明出处。谢谢!
网友评论