Swift-视图阴影篇
2018-10-09 本文已影响417人
阿丶伦
最近接了一个需求,需要给视图添加阴影,发现其中还是有些门门道道的。写一篇文记录下。
Swift中已经提供了很便捷的设置阴影的方法,layer层的shadow。下面是代码
func setShadow(view:UIView,sColor:UIColor,offset:CGSize,
opacity:Float,radius:CGFloat) {
//设置阴影颜色
view.layer.shadowColor = sColor.cgColor
//设置透明度
view.layer.shadowOpacity = opacity
//设置阴影半径
view.layer.shadowRadius = radius
//设置阴影偏移量
view.layer.shadowOffset = offset
}
其中offset为阴影的偏移量,让我们用一系列例子来看看offset是怎么影响阴影偏移
var color = [UIColor.red,
UIColor.orange,
UIColor.cyan,
UIColor.green,
UIColor.purple,
UIColor.yellow]
var size = [CGSize.init(width: 5, height: 5),
CGSize.init(width: -5, height: 5),
CGSize.init(width: 5, height: -5),
CGSize.init(width: -5, height: -5),
CGSize.init(width: 5, height: 0),
CGSize.init(width: 0, height: -5)]
image.png
参考图片,可以得出结论
offset中的width和height
当
width
为正数时,向右偏移,为负数时,向左偏移当
height
为正数时,向下偏移,为负数时,向上偏移基本的阴影已经完成了,为了美观,我们给视图加上边框跟圆角
func setShadow(view:UIView,width:CGFloat,bColor:UIColor,
sColor:UIColor,offset:CGSize,opacity:Float,radius:CGFloat) {
//设置视图边框宽度
view.layer.borderWidth = width
//设置边框颜色
view.layer.borderColor = bColor.cgColor
//设置边框圆角
view.layer.cornerRadius = radius
//设置阴影颜色
view.layer.shadowColor = sColor.cgColor
//设置透明度
view.layer.shadowOpacity = opacity
//设置阴影半径
view.layer.shadowRadius = radius
//设置阴影偏移量
view.layer.shadowOffset = offset
}
image.png
完成。然而当我运用到自定义的UIView中时,又出现了一点小问题
image.png
问题如上,视图没有加上阴影,子视图加上了阴影。后来发现是因为如果不给视图添加背景颜色,阴影就会显示到子视图上,为视图添加背景颜色后,问题解决。
image.png
先写到这里,后续离屏渲染造成的性能损耗的问题,了解透彻后会慢慢补充。