1. 问题描述:
在一个添加了autolayout的UIView上 添加一个CALayer对象,当旋转后,这个CALayer并不会跟随UIView进行重新布局
2. 原因
UIVIew只会重新布局默认的layer,而不会自动重新布局 sublayers
3. 解决
3.1 在重新布局后重新设置layer的大小
3.1.1 UIViewController的viewDidLayoutSubviews
最简单粗糙的就是在UIViewController 的 viewDidLayoutSubviews中重新布局所有的layer。
这种方法当然有问题,
- 问题1:我们都知道,在横竖屏切换的时候,IOS会自动生成一个动画,如果用粗糙的解决方案,只是在动画结束后改变了frame,动画的过程中仍然能够看淡空白
- 问题2:一般vc都会多次调用viewDidLayoutSubviews,这样做既不方便,也不美观,还可能影响效率
3.1.2 UIView的layoutSubviews
或者 CALayer的 layoutSublayers
也就是在这继承这个方法,在这个方法里 重新布局子layout
3.2 为目标CALayer包装上个UIView
定义一个view,把他的layer的class设置为CAGradientClass(我们原来想要添加的CALayer对象),再将这个view添加到原先的UIView就好了
#import
@interface BackgrundView : UIView
@end
#import BackgrundView.h
@interface BackgrundView()
-----------------------
@end
@implementation BackgrundView
+(Class)layerClass{
return [CAGradientLayer class];
}
@end