美文网首页swift
iOS开发系列之终结强制旋转屏幕——Swift

iOS开发系列之终结强制旋转屏幕——Swift

作者: zmfflying | 来源:发表于2020-08-21 10:11 被阅读0次

最近做项目遇到一个需求,就是大部分页面都是竖屏,只有两个页面是横屏,这就要用到强制旋转屏幕了。我查了网上的资料,人云亦云者众多,但是真正有效的很少,所以干脆我自己总结一个吧,demo见底部,文章里所有代码和设置都是demo里的。

第一步:设置项目属性为只允许竖屏

image.png

需要注意的是,iPad需要在info.plist里设置:

image.png

第二步:AppDelegate里的代码

class AppDelegate: UIResponder, UIApplicationDelegate {
    
    var window: UIWindow?
    
    var isForceLandscape: Bool = false
    var isForcePortrait: Bool = false

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        window = UIWindow.init(frame: UIScreen.main.bounds)
        window?.backgroundColor = UIColor.white
        window?.rootViewController = UINavigationController.init(rootViewController: ViewController.init())
        window?.makeKeyAndVisible()
        
        return true
    }

    func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {
        
        if (isForceLandscape) {
            //这里设置允许横屏的类型
            return .landscapeRight;
        }else if (isForcePortrait){
            return .portrait;
        }

        return .portrait;
    }
}

第三步:在控制器里的代码,demo是写在控制器的基类BaseViewController里的

class BaseViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
    }
    
    ///强制横屏
    func forceOrientationLandscape() {
        let appdelegate = UIApplication.shared.delegate as! AppDelegate
        appdelegate.isForceLandscape = true
        appdelegate.isForcePortrait = false
        appdelegate.application(UIApplication.shared, supportedInterfaceOrientationsFor: self.view.window)
        
        //强制翻转屏幕,Home键在右边。
        UIDevice.current.setValue(UIInterfaceOrientation.landscapeRight.rawValue, forKey: "orientation")
        //刷新
        UIViewController.attemptRotationToDeviceOrientation()
        
    }
    
    ///强制竖屏
    func forceOrientationPortrait() {
        let appdelegate = UIApplication.shared.delegate as! AppDelegate
        appdelegate.isForceLandscape = false
        appdelegate.isForcePortrait = true
        appdelegate.application(UIApplication.shared, supportedInterfaceOrientationsFor: self.view.window)
        
        //强制翻转屏幕,Home键在右边。
        UIDevice.current.setValue(UIInterfaceOrientation.portrait.rawValue, forKey: "orientation")
        //刷新
        UIViewController.attemptRotationToDeviceOrientation()
        
    }
    
}

第四步:使用,demo里是TestViewController 使用横屏,ViewController 使用竖屏:

在 TestViewController里使用强制横屏:

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    // 强制横屏
    forceOrientationLandscape()
}

在 ViewController里使用强制竖屏:

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    // 强制竖屏
    forceOrientationPortrait()
}

搞定收工,demo地址: https://github.com/zmfflying/ZOrientationSwift

资料参考:
https://www.jianshu.com/p/5c773628caa6

相关文章

  • iOS开发系列之终结强制旋转屏幕——Swift

    最近做项目遇到一个需求,就是大部分页面都是竖屏,只有两个页面是横屏,这就要用到强制旋转屏幕了。我查了网上的资料,人...

  • iOS开发系列之终结强制旋转屏幕——OC

    最近做项目遇到一个需求,就是大部分页面都是竖屏,只有两个页面是横屏,这就要用到强制旋转屏幕了。我查了网上的资料,人...

  • iOS-屏幕旋转截屏相关

    本篇收录各种屏幕旋转知识点等. 1.详解iOS开发中处理屏幕旋转的几种方法2.iOS 个别页面强制横屏,其他页面竖...

  • Swift小技巧(持续更新)

    1.Swift强制旋转屏幕设置 关键代码: 未完待续~~~

  • ios控制屏幕旋转及相关问题

    ios控制屏幕旋转及相关问题 测试开发环境: Xcode 11.3语言环境: Swift 5.0 [TOC] 一、...

  • iOS 强制旋转屏幕

    项目需求: 我只是以第一个需求为例,第二种情况,道理相同。 无需强行选中 Device Orientation 中...

  • iOS 强制旋转屏幕

    前言 在开发中有时会碰到旋转屏幕的需求,例如直播时横竖屏推流,这里我使用的一种方法时用纯代码强制翻转,其他晚上方法...

  • iOS强制屏幕旋转

    最近项目需要展现一些图表,需要在用到的页面将页面设置为横屏,查阅整理出三个方案记录下来。其中方案一和方案二整个页面...

  • iOS强制旋转屏幕

    // 状态栏动画持续时间CGFloat duration = [UIApplication sharedAppli...

  • Swift 4.2 禁止旋转屏幕-强制屏幕旋转

    禁止旋转屏幕,有两种方法 1、直接Xcode写死,简单方便 (不推荐) 但是这样有个问题,当需要旋转屏幕或者,在倒...

网友评论

    本文标题:iOS开发系列之终结强制旋转屏幕——Swift

    本文链接:https://www.haomeiwen.com/subject/unjyrktx.html