最近接了一個需求,需要給視圖添加陰影,發現其中還是有些門門道道的。寫一篇文記錄下。
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
先寫到這里,后續離屏渲染造成的性能損耗的問題,了解透徹后會慢慢補充。