问题描述
我正在使用xcode 12。 我写了扩展UI视图,如下所示:
@IBInspectable
public var shadowRadius: CGFloat {
get {
return layer.shadowRadius
}
set {
layer.shadowRadius = newValue
}
}
@IBInspectable
public var shadowOpacity: Float {
get {
return layer.shadowOpacity
}
set {
layer.shadowOpacity = newValue
}
}
@IBInspectable
public var shadowOffset: CGSize {
get {
layer.shadowOffset
}
set {
layer.shadowOffset = newValue
}
}
@IBInspectable
public var shadowColor: UIColor {
get {
return UIColor(cgColor: layer.shadowColor ?? UIColor.clear.cgColor)
}
set {
layer.shadowColor = newValue.cgColor
}
}
一切正常,但是当我调试视图时,我看到了一些紫色的警告。
x-xcode-debug-views:// 7f8fd2258020?DBGViewDebuggerLaunchSessionParameter = 7f8fd2258020: 运行时:优化机会:该层使用动态 渲染昂贵的阴影。如果可能,请尝试设置
shadowPath
,或将阴影预先渲染到图像中并将其放置 在该层下面。
有人可以向我解释一下并帮助我摆脱它吗?
解决方法
设置shadowPath
一种解决方案是通过明确设置shadowPath
来“引导”阴影渲染,例如:
yourViewWithShadow.layer.shadowPath = UIBezierPath(rect: yourViewWithShadow.bounds).cgPath
确保在正确的时间设置框架!
缓存栅格化
另一种解决方案是缓存栅格化:
yourViewWithShadow.layer.shouldRasterize = true
yourViewWithShadow.layer.rasterizationScale = UIScreen.main.scale
希望这可以帮助您消除昂贵的计算。