iOS学习iOS 开发每天分享优质文章Swift 专栏

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
先写到这里,后续离屏渲染造成的性能损耗的问题,了解透彻后会慢慢补充。
上一篇下一篇

猜你喜欢

热点阅读