如何解决“优化机会”

问题描述

我正在使用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,或将阴影预先渲染到图像中并将其放置 在该层下面。

有人可以向我解释一下并帮助我摆脱它吗?

Here are the purple warnings

解决方法

设置shadowPath

一种解决方案是通过明确设置shadowPath来“引导”阴影渲染,例如:

yourViewWithShadow.layer.shadowPath = UIBezierPath(rect: yourViewWithShadow.bounds).cgPath

确保在正确的时间设置框架!

缓存栅格化

另一种解决方案是缓存栅格化:

yourViewWithShadow.layer.shouldRasterize = true
yourViewWithShadow.layer.rasterizationScale = UIScreen.main.scale

希望这可以帮助您消除昂贵的计算。