亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

配置iOS?16?屏幕旋轉(zhuǎn)適配實例詳解

 更新時間:2022年09月23日 11:48:00   作者:Andy_GF  
這篇文章主要為大家介紹了配置iOS?16?屏幕旋轉(zhuǎn)適配實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

正文

我們公司的 app 只支持豎屏, 只有在視頻播放的時候才可以橫屏, 所以這就需要我們強制去旋轉(zhuǎn)屏幕. 我想一般的 app 大概都會有這種需求.

最近隨著 iOS16 的更新, 線上的 app 在 iOS16 系統(tǒng)上不管用了, 原因就是蘋果從 iOS16 開始, 更改了屏幕旋轉(zhuǎn)的機制, 以后都要用 UIWindowScence 這個 API 類. 所以我們的 App 就只能根據(jù)版本去做適配, 新的要支持, 老的也要兼容.

在這里, 我就直接上干貨, 只展示重要代碼, 就不寫 demo, 沒什么技術(shù)含量, 做為一個日常記錄分享而已.

重點提示

Xcode 14.0MacOS 12.5手機 iOS15.1iOS16

一. AppDelegate 配置

定義一個 bool 類型的變量

全局控制否是橫屏代理方法根據(jù)這個變量來返回是 豎屏 還是 橫屏, iOS16 及以上可以做到根據(jù)屏幕方向適配橫屏, 我們公司要求不高, 所以我們是強制右橫屏, 這一點是不太友好, 這不是重點.

  • 這一步 SwiftObjC 沒什么區(qū)別, 只是語法不同, 所以就只提供了 Swift 代碼.
@main
class AppDelegate: UIResponder, UIApplicationDelegate {
    var window: UIWindow?
    // 定義一個 bool 類型的變量
    var isFullScreen: Bool = false
    func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {
        if isFullScreen {
            if #available(iOS 16.0, *) {
                // 16 及以上可以做到根據(jù)屏幕方向適配橫屏
                return .landscape
            } else {
                // 16 以下不方便做, 所以我們是強制 右橫屏
                return .landscapeRight
            }
        }
        return .portrait
    }
}

二. 適配 iOS16 旋轉(zhuǎn)屏幕

在原來基礎(chǔ)上添加適配 iOS16 的代碼 在 VC 中點擊橫屏按鈕時進行強制屏幕旋轉(zhuǎn), 這里強調(diào)一下, 播放器的橫屏按鈕操作最好是回調(diào)到當前 VC 中去操作, setNeedsUpdateOfSupportedInterfaceOrientations() 這個方法是 VC 的對象方法, 這里同樣SwiftObjC 沒什么區(qū)別, 只是語法不同.

func switchOrientation(isFullScreen: Bool) {
        let kAppdelegate = UIApplication.shared.delegate as? AppDelegate
        kAppdelegate?.isFullScreen = isFullScreen
        // 設(shè)置屏幕為橫屏
        if #available(iOS 16.0, *) {
            setNeedsUpdateOfSupportedInterfaceOrientations()
            guard let scence = UIApplication.shared.connectedScenes.first as? UIWindowScene else {
                return
            }
            let orientation: UIInterfaceOrientationMask = isFullScreen ? .landscape : .portrait
            let geometryPreferencesIOS = UIWindowScene.GeometryPreferences.iOS(interfaceOrientations: orientation)
            scence.requestGeometryUpdate(geometryPreferencesIOS) { error in
                print("強制\(isFullScreen ? "橫屏" : "豎屏" )錯誤: \(error)")
            }
        } else {
            let oriention: UIDeviceOrientation = isFullScreen ? .landscapeRight : .portrait
            UIDevice.current.setValue(oriention.rawValue, forKey: "orientation")
            UIViewController.attemptRotationToDeviceOrientation()
        }
        // 更新 橫豎屏對應(yīng)的 UI 
        // ...
    }

三. 強制旋轉(zhuǎn)屏幕

在播放器橫豎屏切換按鈕的回調(diào)方法中調(diào)用 旋轉(zhuǎn)屏幕方法即可, 不管手機有沒有打開自動旋轉(zhuǎn), 都可以實現(xiàn)屏幕方向切換.

    // 播放器 - 全屏按鈕切換回調(diào)
    func playerViewRotateScreen(isFull: Bool) {
        switchOrientation(isFullScreen: isFull)
    }

四. 自動旋轉(zhuǎn)

手機需要打開自動旋轉(zhuǎn)開關(guān), 注冊屏幕旋轉(zhuǎn)通知, 監(jiān)聽屏幕旋轉(zhuǎn)時的方向. 方法不只一種, 但是我就用下面這個.

  • 一定要注意下面這兩個方法, 否則有可能通知不生效, 一個開啟一個關(guān)閉.
    • UIDevice.current.beginGeneratingDeviceOrientationNotifications()
    • UIDevice.current.endGeneratingDeviceOrientationNotifications()
  • 注意: 我這里做的是 16 以下只支持右橫屏, 16 不需要獲取設(shè)備方向, 因此可以支持 左/右橫屏. 這也是 AppDelegate 中區(qū)分版本的原因.

友情提示 :

最好是把側(cè)滑返回手勢給禁掉. 否則橫屏側(cè)滑返回就出問題了, 當然也可以做的更精細些, 橫屏時禁止. 我做驗證就簡單些.

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        UIDevice.current.beginGeneratingDeviceOrientationNotifications()
        NotificationCenter.default.addObserver(self, selector: #selector(screenChangedOrientation(_:)), name: UIDevice.orientationDidChangeNotification, object: nil)
        navigationController?.interactivePopGestureRecognizer?.isEnabled = false
    }
    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        navigationController?.interactivePopGestureRecognizer?.isEnabled = true
    }
    override func viewDidDisappear(_ animated: Bool) {
        super.viewDidDisappear(animated)
        NotificationCenter.default.removeObserver(self)
        UIDevice.current.endGeneratingDeviceOrientationNotifications()
    }
    // 橫豎屏監(jiān)聽
    @objc private func screenChangedOrientation(_ notification: Notification) {
        let info = notification.userInfo
        guard let animated = info?["UIDeviceOrientationRotateAnimatedUserInfoKey"] as? Int, animated == 1 else {
            return
        }
        let orientation = UIDevice.current.orientation
        if orientation == UIDeviceOrientation.landscapeLeft || orientation == UIDeviceOrientation.landscapeRight {
            // 橫屏
            videoView.changeScreenOrientation(isFull: true)
        } else if orientation == UIDeviceOrientation.portrait {
            // 豎屏
            videoView.changeScreenOrientation(isFull: false)
        }
    }

以上就是配置iOS 16 屏幕旋轉(zhuǎn)適配實例詳解的詳細內(nèi)容,更多關(guān)于iOS 16 屏幕旋轉(zhuǎn)適配的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • IOS開發(fā)仿微信右側(cè)彈出視圖實現(xiàn)

    IOS開發(fā)仿微信右側(cè)彈出視圖實現(xiàn)

    這篇文章主要介紹了IOS開發(fā)仿微信右側(cè)彈出視圖實現(xiàn)的相關(guān)資料,希望通過本文能幫助到大家,讓大家實現(xiàn)這樣類似的功能,需要的朋友可以參考下
    2017-10-10
  • Objective-C Json 實例詳解

    Objective-C Json 實例詳解

    這篇文章主要介紹了 Objective-C Json 實例詳解的相關(guān)資料,希望通過本文能幫助到大家,讓大家掌握Object-C Json的使用,需要的朋友可以參考下
    2017-10-10
  • iOS-Mac遠程連接控制Window

    iOS-Mac遠程連接控制Window

    這篇文章主要為大家詳細介紹了iOS-Mac遠程連接控制Window,蘋果電腦遠程連接控制Windows電腦,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • IOS 百度糯米客戶端登錄BUG

    IOS 百度糯米客戶端登錄BUG

    這篇文章主要介紹了IOS 百度糯米客戶端登錄BUG,問題分析及解決方案,本文介紹的非常詳細,具有參考價值,特此分享供大家學習
    2016-01-01
  • iOS新版微信底部返回橫條問題的解決

    iOS新版微信底部返回橫條問題的解決

    這篇文章主要介紹了iOS新版微信底部返回橫條問題的解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-03-03
  • iOS通過多種方式創(chuàng)建控制器

    iOS通過多種方式創(chuàng)建控制器

    這篇文章主要為大家詳細介紹了iOS通過多種方式創(chuàng)建控制器的相關(guān)方法,感興趣的小伙伴們可以參考一下
    2016-04-04
  • iOS使用Charts框架繪制柱形圖

    iOS使用Charts框架繪制柱形圖

    本文主要介紹了iOS使用Charts框架繪制柱形圖的方法,具有一定的參考價值,下面跟著小編一起來看下吧
    2016-12-12
  • 基于iOS實現(xiàn)圖片折疊效果

    基于iOS實現(xiàn)圖片折疊效果

    這篇文章主要為大家詳細介紹了基于iOS實現(xiàn)圖片折疊效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • iOS實現(xiàn)抖音點贊動畫效果

    iOS實現(xiàn)抖音點贊動畫效果

    這篇文章主要為大家詳細介紹了iOS實現(xiàn)抖音點贊動畫效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-01-01
  • iOS鍵盤如何添加隱藏鍵盤功能

    iOS鍵盤如何添加隱藏鍵盤功能

    這篇文章主要為大家詳細介紹了iOS鍵盤如何添加隱藏鍵盤功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-02-02

最新評論