Sketch是APP设计的神器,大多数设计师都选择它作为APP界面的设计工具。在Sketch中设置一个阴影,效果图及参数如下:(Sketch中的效果)(Sketch中的阴影参数)iOS中开发实现阴影的方式是利用UIView的layer属性。图层中阴影相关的设置有以下属性:shadowPathshadowColorshadowOpacityshadowOffsetshadowRadius对应Sketch中的阴影参数:shadowPath~>shadowrangeshadowColor~>shadowcolorshadowOpacity~>shadowtransparencyshadowOffset~>XAnd??YshadowRadius~>阴影模糊(layer属性和Sketch阴影的对应关系)根据上图的对应关系,在代码中实现(shadowView的大小为100x100):letlayer=shadowView.layer//spread对应Sketch中的阴影“扩展”值为10letspread:CGFloat=10varrect=CGRect(x:0,y:0,width:100,height:100);rect=rect.insetBy(dx:-spread,dy:-spread)layer。shadowPath=UIBezierPath(rect:rect).cgPath//颜色为黑色(#000000)layer.shadowColor=UIColor.black.cgColor//alpha50layer.shadowOpacity=0.5//X:0Y:10layer.shadowOffset=CGSize(width:0,height:10)//对应Sketch中阴影的“blur”设置,值为20/2=10layer.shadowRadius=10上面代码运行效果如下:(实现效果)100%还原Sketch的设计,完美。值得一提的是图层阴影和圆角是可以共存的,阴影路径也需要考虑圆角的值。为了方便使用,给CALayer添加一个扩展来设置阴影:extensionCALayer{funcskt_setShadow(color:UIColor?=.black,alpha:CGFloat=0.5,x:CGFloat=0,y:CGFloat=2,blur:CGFloat=4,传播:CGFloat=0){shadowOffset=CGSize(width:x,height:y)shadowRadius=blur*0.5shadowColor=color?.cgColorshadowOpacity=Float(alpha)letrect=bounds.insetBy(dx:-spread,dy:-spread)letpath=UIBezierPath(roundedRect:rect,cornerRadius:cornerRadius)shadowPath=path.cgPath}}使用起来很简单,传入的值和Sketch中的shadow参数一样:layer.skt_setShadow(color:.black,alpha:0.5,x:0,y:10,blur:20,spread:10)
