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

关于 横竖屏切换后的检测 ,查看了很多篇文章,通过自己实践总结了一下。我的屏幕切换判断都是在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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值