一:核心方法

1.三个方法

1.1:开始就会触发

  - (void)viewWillLayoutSubviews;

1.2:开始就会触发 

   - (void)viewDidLayoutSubviews;

1.3:设备旋转的时候会触发。在UIScreen的bounds和size(下面方法中的参数)。按照size为主。  

  - (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id <UIViewControllerTransitionCoordinator>)coordinator;

   

2:viewLayoutSubviews  触发条件

1、init初始化不会触发layoutSubviews
2、addSubview会触发layoutSubviews
3、设置view的Frame会触发layoutSubviews,当然前提是frame的值设置前后发生了变化
4、滚动一个UIScrollView会触发layoutSubviews
5、旋转Screen会触发父UIView上的layoutSubviews事件
6、改变一个UIView大小的时候也会触发父UIView上的layoutSubviews事件
 
 
 

二:获取设备反向

typedefNS_ENUM(NSInteger, UIDeviceOrientation) {
  UIDeviceOrientationUnknown,      // 0
  UIDeviceOrientationPortrait,        // 1:设备垂直竖向方向放置, 并且home键在下方
  UIDeviceOrientationPortraitUpsideDown,  // 2:设备垂直竖向方向放置, 并且home键在上方
  UIDeviceOrientationLandscapeLeft,     // 3:设备垂直横向方向放置, 并且home键在右方
  UIDeviceOrientationLandscapeRight,       // 4: 设备垂直横向方向放置, 并且home键在左方
  UIDeviceOrientationFaceUp,       // 5: 设备水平放置, 屏幕在上方
  UIDeviceOrientationFaceDown       // 6:设备水平放置, 屏幕在下方
} (TVOS不可用)
 

三:判断屏幕横屏/竖屏

方法一:  使用- (void)viewWillLayoutSubviews;方法:

- (void)viewWillLayoutSubviews

{

     [self shouldRotateToOrientation:(UIDeviceOrientation)[UIApplication sharedApplication].statusBarOrientation];

}

-(void)shouldRotateToOrientation:(UIDeviceOrientation)orientation 
{
if (orientation == UIDeviceOrientationPortrait ||orientation ==
UIDeviceOrientationPortraitUpsideDown) { // 竖屏 } else { // 横屏 }
}

方法二:

  • 使用- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id <UIViewControllerTransitionCoordinator>)coordinator

    • size: 屏幕翻转后的新的尺寸;
    • coordinator: 屏幕翻转过程中的一些信息,比如翻转时间等;
#pragma mark - 屏幕翻转就会调用
- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
{// 记录当前是横屏还是竖屏
  BOOLisLandscape = size.width == kLandscapeWidth;
  // 翻转的时间
  CGFloatduration = [coordinator transitionDuration];
   [UIViewanimateWithDuration:duration animations:^{
      // 1.设置dockview的frame
      [self.dockView rotateToLandscape:isLandscape];
      // 2.屏幕翻转后(设置完dockview的frame)要重新设置contentView的x值
       self.contentView.x = self.dockView.width;
   }];
}

四:代码地址:

 
 
个人小小的建议:建议把View封装起来。之后再设备变换的时候,修改自定义的view的frame。
 
 
 
备注:
 

参考地址

 
 
 
 
  
 

48 (OC)* 适配iPad和iPhone、以及横竖屏适配。的更多相关文章

  1. (一〇八)iPad开发之横竖屏适配

    在iPad开发中,横竖屏的视图常常是不同的,例如侧边栏Dock,在横屏时用于屏幕较宽,可以展示足够多的内容,每个按钮都可以展示出标题:而竖屏时Dock应该比较窄,只显示图标不现实按钮标题. iPad比 ...

  2. iOS 横竖屏适配

    关于横竖屏适配 也没做过,今天读别人的源码,遇到了.为了了解清楚,就系统的学习一下. 一 横竖屏方向枚举 关于横竖屏一共有三种枚举 UIInterfaceOrientation UIInterface ...

  3. iOS 横竖屏适配 笔记

    研究消息转发机制 已经一周多了,但是 还是没整理出博客, 还是先写一个 项目中遇到的 横竖屏适配问题. // 开启自动转屏 - (BOOL)shouldAutorotate { return YES; ...

  4. css横竖屏适配

    Css做到横竖屏适配:定义两个样式 { @media screen and (orientation: portrait){ Css[竖向定义样式] } @media screen and (orie ...

  5. ipad和iphone的适配

    关于xib或者storybord下iphone的横竖屏的适配以及ipad的适配 ios8出现了Size Classes,解决了各种屏幕适配的问题,他把屏幕的宽和高分别分成了三种,把屏幕总共分成了九种情 ...

  6. iPad横竖屏代码适配

    你可能非常了解用不同的方式去适配不同尺寸的iPhone屏幕,在适配iPhone屏幕时你需要考虑的只是屏幕大小变化带来的UI元素间隔的变化,但是在iPad上主要针对的是横竖屏下完全不同的UI元素的布局, ...

  7. AJ学IOS 之ipad开发qq空间项目横竖屏幕适配

    AJ分享,必须精品 一:效果图 先看效果 二:结构图 如图所示: 其中用到了UIView+extension分类 Masonry第三方框架做子控制器的适配 NYHomeViewController对应 ...

  8. object-c中实现特定一个或者多个页面横竖屏,其他界面保持竖屏显示。

    1.首先设置项目支持的屏幕方向.info.plist设置(自行设置) 2.写一个子类CusNavigationController 继承 UINavigationController,在CusNavi ...

  9. Android 横竖屏切换处理

    最近在做一个平板项目,有横竖屏切换的问题,写一下处理的方法. 第一种:禁止横竖屏切换. 对于单独的Activity,使用下面的方式直接配置: <activity android:name=&qu ...

随机推荐

  1. windows下搭建syslog服务器及基本配置

    一.环境 windows7 64位+ kiwi_syslog_server_9.5.0 kiwi_syslog百度云下载地址: 链接: https://pan.baidu.com/s/1EpPBNsL ...

  2. 运行MonkeyRunner时使用Genymotion模拟器

    Android自带的模拟器实在太慢太卡,远没有Genymotion的顺畅,所以找了一个办法,在启动py文件时使用Genymotion的模拟器 1.Genymotion安装完成之后,在Settings- ...

  3. C++标准库函数 end 的实现原理(非类型模板参数)

    在刚开始学习<C++ Primer>的时候遇到了 end 函数,感觉很神奇,但又很迷惑:为什么能获得数组的尾后指针呢?编译器也不会在内存中申请一块空间放数组元素的个数啊!最近再一次遇到了 ...

  4. 谈谈JVM垃圾回收

    概述 Java运行时区域中,程序计数器,虚拟机栈,本地方法栈三个区域随着线程的而生,随线程而死,这几个区域的内存分配和回收都具备确定性,不需要过多考虑回收问题.而Java堆和方法区则不一样,一个接口的 ...

  5. .NET导出Excel的四种方法及评测

    .NET导出Excel的四种方法及评测 导出Excel是.NET的常见需求,开源社区.市场上,都提供了不少各式各样的Excel操作相关包.本文,我将使用NPOI.EPPlus.OpenXML.Aspo ...

  6. jvm系列(四):jvm调优-命令篇

    运用jvm自带的命令可以方便的在生产监控和打印堆栈的日志信息帮忙我们来定位问题!虽然jvm调优成熟的工具已经有很多:jconsole.大名鼎鼎的VisualVM,IBM的Memory Analyzer ...

  7. HDU 6363

    题意略. 思路: 这里有两个结论需要注意: 1.gcd(a ^ x - 1,a ^ y - 1) = a ^ gcd(x,y) - 1 2.gcd(fib[x],fib[y]) = fib[gcd(x ...

  8. Condition控制线程通信

    Condition控制线程通信 一.前言 java.util.concurrent.locks.Condition 接口描述了可能会与锁有关联的条件变量.这些变量在用法上与使用Object.wait ...

  9. 推荐一个比 ls 命令速度快 100 倍的文件目录浏览神器

    本文首发于:微信公众号「运维之美」,公众号 ID:Hi-Linux. 「运维之美」是一个有情怀.有态度,专注于 Linux 运维相关技术文章分享的公众号.公众号致力于为广大运维工作者分享各类技术文章和 ...

  10. 别说你不会开发exe程序,拿走不谢。

    本文重点介绍如何将我们写的java代码打包成在电脑上可以运行的exe文件 本文重点介绍如何将我们写的java代码打包成在电脑上可以运行的exe文件.这里只介绍直接打包成exe的方法,至于打包成exe安 ...