CALayer not resizing with Autolayout

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
posted @ 2016-04-14 15:38  孙焱焱  阅读(894)  评论(0编辑  收藏  举报