项目中有遇到一种情况 为有设置圆角的view或者button设置阴影,用常规写法发现阴影添加无效,曾试过在需要添加阴影控件下方添加CALayer,如果控件始终不动还好,但控件如果要发生位置变化的话CALayer本身具有动画属性,会造成阴影会慢控件一步,这时你又需要禁用动画即可做到,但禁用动画后你不想控件移动的很突兀,那就很尴尬,而且这么写下来代码冗长,神烦,因此找到了下面的方法
如果设置了超过主图层的部分减掉,则设置阴影不会有显示效果。因此,需将剪切超出主图层部分的代码设置为NO
view.clipsToBounds=NO;
// shadowColor阴影颜色
view.layer.shadowColor = [UIColor blackColor].CGColor;
// shadowOffset阴影偏移,x向右偏移1,y向下偏移1,默认(0, -3),这个跟shadowRadius配合使用
view.layer.shadowOffset = CGSizeMake(1,1);
// 阴影半径,默认3
view.layer.shadowRadius = 4;
// 阴影透明度,默认0
view.layer.shadowOpacity = 0.5;
clipsToBounds(UIView)
是指视图上的子视图,如果超出父视图的部分就截取掉,相当剪切超出父View的部分
masksToBounds(CALayer)
却是指视图的图层上的子图层,如果超出父图层的部分就截取掉,相当于剪切超出父View layer的部分
clipsToBounds执行的时候,调用了自己图层的maskToBounds方法
所以在view上添加圆角及阴影时,可以不设置masksToBounds
而只需添加view.clipsToBounds=NO
即可
但是,在label上添加圆角及阴影时却无法用该方法实现,只能用到其他方法折回完成。。