原文链接:How to add a shadow to a View
iOS 能够动态的为任何UIView添加阴影,这些阴影是自动适应元素的形状,即使像UILabel这种文本曲线, 阴影功能是内置在UIView中的。你只需要关心和设置他的属性就ok啦
有如下常用相关属性(针对UILayer层的):
- shadowColor: 设置阴影的颜色,必须是CGColor类型的。
- shadowOpacity: 设置过渡透明的,值在0~1
- shadowOffset: 设置阴影与view的距离,给出3D偏移感(我的理解是相当于中心点的偏移)默认值(0,-3)
- shadowRadius: 阴影半径
下面有一些示例代码:
let yourView = UIView() // 创建一个UIView
yourView.layer.shadowColor = UIColor.black.cgColor // 设置背景颜色
yourView.layer.shadowOpacity = 1 // 设置透明度
yourView.layer.shadowOffset = .zero // 设置偏移
yourView.layer.shadowRadius = 10 // 设置半径
注意:由于需要围绕内容形状设置阴影,动态生成非常消耗GPU资源, 所以建议设置shadowPath的值,以便不用动态计算,下面有一个好的例子【有效避免离屏渲染】:
yourView.layer.shadowPath = UIBezierPath(rect: yourView.bounds).cgPath // 设置路径
同是告诉 iOS 缓存渲染阴影,使得不用重新绘制(设置光栅化)
yourView.layer.shouldRasterize = true // 设置光栅化缓存
如果你设置的光栅化缓存,同是你应该设置光栅化比例(rasterizationScale),以保证和屏幕的scale一致,不然会有像素差别(不清晰)。
yourView.layer.rasterizationScale = UIScreen.main.scale //设置光栅化比例