前言:做图片选择器的时候,需要支持横竖屏动态切换。笔记记录一下较为简便的处理方法。
前提: APP全局强制竖屏且不支持横屏!在部分页面如果打开横竖屏开关,则支持横竖屏动态切换;如果关闭,则需要点击才能跳转横屏页面。
一、设备支持横竖屏切换
设备在控制页面打开横竖屏开关,即设备支持横竖屏动态切换。
支持横竖屏
添加横竖屏的通知
- 添加横竖屏的通知
- 在通知方法内处理横屏 or 竖屏需要做的事
- 移除通知
1.监测手机横屏的通知
NotificationCenter.default.addObserver(self, selector: #selector(handleDeviceOrientationDidChange(interfaceOrientation:)), name: UIDevice.orientationDidChangeNotification, object: nil)
2.手机更改屏幕方向后发送通知, 跳转到页面
@objc func handleDeviceOrientationDidChange(interfaceOrientation: UIInterfaceOrientation){
let device = UIDevice.current
//横屏时, 跳转页面
if device.orientation == .landscapeLeft || device.orientation == .landscapeRight{
//横屏时候要做的事 do something
}
//竖屏时,退出页面
if device.orientation == .portrait || device.orientation == .portraitUpsideDown{
//竖屏时候要做的事 do something
}
}
3.移除通知
deinit {
NotificationCenter.default.removeObserver(self)
}
UIDevice横竖屏参数
public enum UIDeviceOrientation : Int {
case unknown
case portrait // 设备垂直方向,home按钮在底部
case portraitUpsideDown // 设备垂直方向,主页按钮在顶部
case landscapeLeft //设备水平方向,主按钮在右边
case landscapeRight //设备水平方向,主按钮在左边
case faceUp // 面向设备平面,面朝上
case faceDown // 面向设备平面,面朝下
}
效果
- 当在竖屏时,横屏会跳转横屏页面
- 当在横屏时,竖屏会返回竖屏页
下图做了个简单的gif展现,下图的操作是操作手机横竖屏的结果
横竖屏动态切换.gif
二、设备不支持横竖屏切换-强制横屏
下面说一下强制横屏的处理办法
强制横屏就是在设备仅支持竖屏的前提下
设备仅支持竖屏
AppDelegate中设置
- 添加全局横竖屏控制开关
-
supportedInterfaceOrientationsFor
方法内添加横竖屏支持
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
//横竖屏控制开关
var allowRotation: Bool = false
//AppDelegate 的其他方法………………
func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {
if allowRotation{
//如果横屏开关打卡,允许设备横屏
return UIInterfaceOrientationMask.landscape
}
//APP默认支持竖屏
return UIInterfaceOrientationMask.portrait
}
}
ViewController配置
- 在
viewDidLoad
中设置allowRotation
变量为true
- 在页面返回方法中设置
allowRotation
变量为false
,并且需要把屏幕设置回竖屏
1.获取AppDelegate变量
private let appDelegate: AppDelegate = UIApplication.shared.delegate as! AppDelegate
2.viewDidLoad 设置全局变量
override func viewDidLoad() {
appDelegate.allowRotation = true
}
3.在页面返回方法中设置全局变量,并设置回竖屏
//退出横屏
@objc func exitFullScreen(){
appDelegate.allowRotation = false
//将视图还原成竖屏
let orientationTarget = UIInterfaceOrientation.portrait.rawValue
UIDevice.current.setValue(orientationTarget, forKey: "orientation")
}
效果展示
- 当在竖屏时,点击全屏按钮跳转强制横屏页面
网友评论