美文网首页
关于IOS中的屏幕部分旋转

关于IOS中的屏幕部分旋转

作者: 未曾心动 | 来源:发表于2016-11-03 21:54 被阅读0次

在做开发的时候经常碰到个别页面需要横屏的需求,比如播放视频之类的。以前本人的习惯是把屏幕自动旋转关掉,所以大部分时候都是Portrait状态,除非使用一些视频游戏应用的时候才会变成Landscape。当然也会有人是常年打开自动旋转的,上次在测试一个app的时候,机主就是这样的人,由于没有注意这个问题导致有些界面因为横竖切换的原因显示混乱(当然这些东西完成可以用AutoLayout调好)其实这个问题很好解决,只要把下图中LandscapeLeft和LandscapeRight的勾勾去掉即可。



可是问题来了如果遇到程序中需要部分旋转的情况我们该如何处理呢?我们这里暂时不考虑用transform的情况,和大家交流一下shouldAutorotate的使用。用shouldAutorotate实现一个ViewController的旋转需要在ViewController中实现下面三个方法:

    override func shouldAutorotate() -> Bool {
        return false
    }
    
    override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {
        return .Portrait
    }

    override func preferredInterfaceOrientationForPresentation() -> UIInterfaceOrientation {
        return .Portrait
    }

一、关于shouldAutorotate文档里有许多的详细的描写,由于英文一般简单理解就是这个ViewController能不能旋转,如果return值是false时这个ViewController不能旋转反之则可以旋转。
二、supportedInterfaceOrientations这个是此ViewController支持的方向有七种分别是:

public struct UIInterfaceOrientationMask : OptionSetType {
    public init(rawValue: UInt)
    
    public static var Portrait: UIInterfaceOrientationMask { get }
    public static var LandscapeLeft: UIInterfaceOrientationMask { get }
    public static var LandscapeRight: UIInterfaceOrientationMask { get }
    public static var PortraitUpsideDown: UIInterfaceOrientationMask { get }
    public static var Landscape: UIInterfaceOrientationMask { get }
    public static var All: UIInterfaceOrientationMask { get }
    public static var AllButUpsideDown: UIInterfaceOrientationMask { get }
}

这些方向均是Home键所在方向:
1.支持Home键朝下
2.支持Home键在左
3.支持Home键在右
4.支持Home键朝上
5.支持Home键在左右
6.支持所有方向
7.支持除Home键朝上以外的所有方向
如果此方法的返回值与 AppDelegate中supportedInterfaceOrientationsForWindow的返回值能够对应的话,此ViewController会支持supportedInterfaceOrientations所返回的方向,也就是整个程序所支持的旋转方向必须包含ViewController的支持方向。
三、preferredInterfaceOrientationForPresentation方法在文档中是这样解释的:


preferredInterfaceOrientationForPresentation

当此ViewController支持多个方向的时候最优先显示的屏幕方向。
注:preferredInterfaceOrientationForPresentation这个方法是我着重要说的,因为我在程序的开发中发现这个方法一直不执行,在网上也查了很多例子发现没有说的很明白的,自己在测试中发现当页面presentViewController的时候会执行,而常用的pushViewController时不会执行,原因应该是rootViewController的问题,也就是只有rootViewController才会执行presentViewController(如果这个地方有异议或者更好的解释,可以请大家指出一起交流)。
由于上面preferredInterfaceOrientationForPresentation的问题在pushViewController的时候无法使我们的页面横屏,所以需要借助强制旋转方法(参数是要旋转的方向):

UIDevice.currentDevice().setValue(UIInterfaceOrientation.LandscapeLeft.rawValue, forKey: "orientation")

至此关于shouldAutorotate部分屏幕旋转的内容就是这些了,附上demo地址https://github.com/Adverslty/RotationDome
demo里也有关于Statusbar在旋转中的的显示与隐藏。

相关文章

  • 关于IOS中的屏幕部分旋转

    在做开发的时候经常碰到个别页面需要横屏的需求,比如播放视频之类的。以前本人的习惯是把屏幕自动旋转关掉,所以大部分时...

  • 屏幕旋转和弹出框

    iOS中控制屏幕旋转相关方法 shouldAutorotate:是否支持屏幕旋转 alertView:clicke...

  • 屏幕旋转

    屏幕旋转 推荐文档 了解UIWindow——UIWindow实践 iOS屏幕旋转问题总结 IOS:屏幕旋转与变换 ...

  • 关于IOS屏幕旋转的问题

    IOS 开发中,屏幕旋转是比较蛋疼的。网络上有很多的关于屏幕旋转的文章,都比较碎片,而且有些做法还很暴力,并且在应...

  • 关于iOS屏幕旋转

    在iOS开发中,最常见的屏幕旋转方案: 取消Device Orientation的选择按钮取消选中 在appDel...

  • iOS 关于屏幕旋转shouldAutorotate

    iOS中关于shouldAutorotate(屏幕旋转的问题); 在这之前必须在你的Info里面配置你的支持方向信...

  • 关于iOS屏幕旋转处理

    首先Device orientation中要配置支持方向其次关键方法如下:1.是否支持自动旋转 (BOOL)sho...

  • iOS 关于屏幕旋转问题

    关于屏幕旋转需要理解两个概念设备方向(UIDeviceOrientation)和屏幕方向(UIInterfaceO...

  • iOS-屏幕旋转截屏相关

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

  • OC - 屏幕旋转(自动旋转、手动旋转、兼容iOS6之前系统)

    导读: 一、iOS6之前屏幕旋转知识了解 二、iOS6(包括iOS6)之后屏幕旋转知识了解 三、自动旋转具体操作 ...

网友评论

      本文标题:关于IOS中的屏幕部分旋转

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