牛B的swift屏幕旋转经验终结者(OC统一思路)

1、AppDelegate

(1)定义变量 var blockRotation: Bool = false

(2)定义方法

Swift代码

func application(application: UIApplication, supportedInterfaceOrientationsForWindow window: UIWindow?) -> UIInterfaceOrientationMask {
  if self.blockRotation{
    return UIInterfaceOrientationMask.All
  } else {
    return UIInterfaceOrientationMask.Portrait
  }
}

2、要横屏的viewController

(1)获取变量

  let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate

(2)在viewDidLoad中修改blockRotation变量值

  override func viewDidLoad() {

    super.viewDidLoad()

   appDelegate.blockRotation = true

}

(3)viewWillAppear 设置页面横屏

override func viewWillAppear(animated: Bool) {

let value = UIInterfaceOrientation.LandscapeLeft.rawValue

UIDevice.currentDevice().setValue(value, forKey: "orientation")

}

(4)viewWillDisappear设置页面转回竖屏

override func viewWillDisappear(animated: Bool) {

appDelegate.blockRotation = false

let value = UIInterfaceOrientation.Portrait.rawValue

UIDevice.currentDevice().setValue(value, forKey: "orientation")

}

(5)横屏页面是否支持旋转

// 是否支持自动横屏。看项目可调,可以设置为true

override func shouldAutorotate() -> Bool {

return false

}

经验总结:

上面情况是一个界面竖屏跳转到第二个横屏界面。

需要一个界面可以竖屏,然后想竖屏播放器那样突然来个横屏,怎么办,接下来就是放大招了:

给想要横屏或者竖屏调用下面的动作。

// MARK: - 横屏

func hengp() {

appDelegate.blockRotation = true

let value = UIInterfaceOrientation.LandscapeLeft.rawValue

UIDevice.currentDevice().setValue(value, forKey: "orientation")

}

// MARK: - 竖屏

func shup() {

appDelegate.blockRotation = false

let value = UIInterfaceOrientation.Portrait.rawValue

UIDevice.currentDevice().setValue(value, forKey: "orientation")

}

// 将要发生旋转就触发代理

override func willRotateToInterfaceOrientation(toInterfaceOrientation: UIInterfaceOrientation, duration: NSTimeInterval) {

}

// 旋转完成触发代理。我们需要在这里对必要的界面设置重新布局

override func didRotateFromInterfaceOrientation(fromInterfaceOrientation: UIInterfaceOrientation) {

  // 获取当前手机物理状态的屏幕模式,看看是横屏还是竖屏.

let interfaceOrientation = UIApplication.sharedApplication().statusBarOrientation

if(interfaceOrientation == UIInterfaceOrientation.Portrait)

{

//当前是在竖屏模式

print("竖屏")

}else{

     //当前是在横屏模式

              self.theWebView?.frame = self.view.frame

}

}

记住:横屏后,和竖屏前的宽高度值是会变的,如果你有缓存保存了宽高度值,在这种情况下,横屏后获取到以前竖屏的保存的宽高度值,一定要重新获取,

  let bWidth = CGRectGetWidth(UIScreen.mainScreen().bounds)     ///<    屏幕宽度

let bHeight = CGRectGetHeight(UIScreen.mainScreen().bounds)  ///<    屏幕高度

牛B的swift屏幕旋转经验终结者(OC统一思路)的更多相关文章

  1. 【Android】[转] Android屏幕旋转使用OrientationEventListener的监听

    说明 遇到一个奇葩的问题,我在使用onConfigChanged拦截屏幕的横竖屏旋转时,发现直接进行180度的横屏/竖屏转换居然没有反应!查找原因发现仅对landscape或者portrait状态有用 ...

  2. IOS6屏幕旋转详解(自动旋转、手动旋转、兼容IOS6之前系统)

    转自 http://blog.csdn.net/zzfsuiye/article/details/8251060 概述: 在iOS6之前的版本中,通常使用 shouldAutorotateToInte ...

  3. 屏幕旋转时调用PopupWindow update方法更新位置失效的问题及解决方案

       接到一个博友的反馈,在屏幕旋转时调用PopupWindow的update方法失效.使用场景如下:在一个Activity中监听屏幕旋转事件,在Activity主布局文件中有个按钮点击弹出一个Pop ...

  4. h5屏幕旋转的时间和样式的设置

    好几天没更新博客了,今天写写小感悟和一个小东西吧! 随着前端的前端的越来越火,对前端的要求也越来越高,从之前的切图到开发网站再到现在移动端开发,微信开发,手机app混合开发,不得不说现在前端在开发行业 ...

  5. Runtime解决屏幕旋转问题

    前言 大家或许在iOS程序开发中经常遇到屏幕旋转问题,比如说希望指定的页面进行不同的屏幕旋转,但由于系统提供的方法是导航控制器的全局方法,无法随意的达到这种需求.一般的解决方案是继承UINavrgat ...

  6. Android 屏幕旋转 处理 AsyncTask 和 ProgressDialog 的最佳方案

    的最佳方案 标签: Android屏幕旋转AsyncTaskProgressDialog 2014-07-19 09:25 39227人阅读 评论(46) 收藏 举报 分类: [android 进阶之 ...

  7. iOS实现屏幕旋转

    iOS实现屏幕旋转有两种方式 1. 应用本身支持 2. 手动旋转UIView (这种方式我没找到旋转 系统控件的方法 如:键盘.导航.UIAlertView) 如果你只是要把竖屏的播放器,做成支持横屏 ...

  8. Recovery和Charger模式下屏幕旋转180度

    转自:http://www.etwiki.cn/android/1267.html 如何让Recovery (系统固件升级),charger(关机充电动画)时屏幕旋转180度 解决方法: 1.在boo ...

  9. ios实现屏幕旋转的方法

    1.屏蔽AppDelegate下面的屏幕旋转方法 #pragma mark - 屏幕旋转的 //- (UIInterfaceOrientationMask)application:(UIApplica ...

随机推荐

  1. div内容溢出

    前几天遇到一个问题,代码是这样一个层次: <div class="province"> <ul> <li>1</li> <li ...

  2. 同源策略和Jsonp、CORS

    一.同源策略 同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响.可以说Web是构建在同源策略基础之 ...

  3. 在 CentOS 上安装 node.js

    进入到 /usr/local/ 目录中: cd /usr/local/ 创建 nodejs 文件夹: mkdir -p nodejs 进入到 nodejs 目录中: cd nodejs 下载 node ...

  4. jQuery 添加样式属性的优先级别

    jQuery类中添加多个属性 $('#five .a') .css({ color:'blue', border:'2px solid green', background:'blue' }); jQ ...

  5. Linux 学习 一, useradd

    安装好VMware 安装好Linux 在安装Linux时候,建立了一个用户,dragon, 和密码...这个用户不是root用户,没有root权限 可以切换dragon 到用户root,这个时候就有r ...

  6. linux 安装和卸载软件

    安装: apt-get install cups-pdf 卸载:apt -get remove cups

  7. SQL Server ->> 在SQL Server中创建ASSEMBLY

    首先要把数据库的TRUSTWORTHY属性改为ON ALTER DATABASE [MYDB] SET TRUSTWORTHY ON GO 接下来直接创建ASSEMBLY应该就没问题了.但是往往有可能 ...

  8. UML视频

    https://www.bilibili.com/video/av34973179/?p=1 北京 圣思园 UML视频

  9. AWS的登录认证。。。

    Hello, I’m sorry for any concern regarding the $1.00 Authorization that you see associated with your ...

  10. Quartus II管脚批量分配文件(.tcl)格式

    package require ::quartus::project set_location_assignment PIN_E1 -to clk set_location_assignment PI ...