关于 横竖屏切换后的检测 ,查看了很多篇文章,通过自己实践总结了一下。我的屏幕切换判断都是在UIView上面
第一种就是UIView 的
layoutSubviews方法里面 ,什么时候会调用这个方法呢?我也是查看其他博客的文章总结如下
1、init初始化不会触发layoutSubviews
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