iOS 获取横竖屏的方法和问题

来源:互联网 发布:python处理json字符串 编辑:程序博客网 时间:2024/06/02 04:48

关于 横竖屏切换后的检测 ,查看了很多篇文章,通过自己实践总结了一下。我的屏幕切换判断都是在UIView上面

第一种就是UIView 的

layoutSubviews方法里面 ,什么时候会调用这个方法呢?我也是查看其他博客的文章总结如下

1、init初始化不会触发layoutSubviews

   但是是用initWithFrame 进行初始化时,当rect的值不为CGRectZero时,也会触发

2、addSubview会触发layoutSubviews

3、设置view的Frame会触发layoutSubviews,当然前提是frame的值设置前后发生了变化

4、滚动一个UIScrollView会触发layoutSubviews

5、旋转Screen会触发父UIView上的layoutSubviews事件

6、改变一个UIView大小的时候也会触发父UIView上的layoutSubviews事件

也就是说 旋转屏幕是会触发这个layoutSubviews方法,但是 (这里出现了问题 我也不知道为什么,就是在使用iPad 的时候,我的自定义controller没有用sb,添加了一个自定义的UIView UIView 里面重写了layoutSubviews方法  当我切换的时候 ,很奇怪并没有调用 ,查找了很多但是还是没有找到为甚?所以这个方法只适合iPhone ,我朋友说的是iPad 如果是在7.0的话修改一下代码可以判断,但是在8.0以上就不行了 — - !);言归正传,如何去检查是横屏还是竖屏呢,在其他博客里面讲的很好 获取电池的方向来 判读屏幕的方向。
<pre name="code" class="objc"><pre name="code" class="objc">-(void)layoutSubviews{    [super layoutSubviews];//    获取电池的方向    UIInterfaceOrientation interfaceOrientation = [UIApplication sharedApplication].statusBarOrientation;    if(interfaceOrientation == UIDeviceOrientationPortrait || interfaceOrientation == UIDeviceOrientationPortraitUpsideDown){        [self setVerticalFrame];    }    else if(interfaceOrientation == UIDeviceOrientationLandscapeLeft || interfaceOrientation == UIDeviceOrientationLandscapeRight){        [self setHorizontalFrame];    }}

第二种就是 通过添加通知


在我们UIView上面添加一个通知 UIDeviceOrientationDidChangeNotification 

屏幕改变的就会触发。在通知的方法里面添加上面的代码即可

经过测试。。适用于iphone 和ipad 

0 0
原创粉丝点击