Swift - 重用渐变的代码效率最高的方法?

Swift - Most code-efficient way to reuse gradients?

我的 UI 需要大约 7-10 种不同的渐变。

我的第一个(默认)渐变设置如下:

let gradientLayer = CAGradientLayer()

在我看来DidLoad:

gradientLayer.frame = self.view.bounds
gradientLayer.colors = [lightBlue, lightPurple]
gradientLayer.locations = [0.0, 1.0]
gradientLayer.zPosition = -1
self.view.layer.addSublayer(gradientLayer)

gradientLayer 是默认渐变。所以假设我想定义: gradientVariantOne / gradientVariantTwo / gradientVariantThree (等) 但是所有这些新渐变都将具有与 gradientLayer 相同的帧/位置/zPosition。

我如何编写代码才能使这些新渐变继承这些属性?这将使代码更精简,并且将来易于修改。

谢谢

您可以创建一个 UIView 扩展并通过调用方法添加渐变。

extension UIView {
    private func prepareGradient() -> CAGradientLayer {
        let gradientLayer = CAGradientLayer()
        gradientLayer.frame = self.bounds
        //add all common setup here
        return gradientLayer
    }

    func addGradientVariantOne() {
        let gradientLayer = prepareGradient()
        gradientLayer.colors = [lightBlue, lightPurple]
        gradientLayer.locations = [0.0, 1.0]
        gradientLayer.zPosition = -1
        self.layer.addSublayer(gradientLayer)
    }
}

那么你可以直接调用:

self.view.addGradientVariantOne()

只需为每个梯度创建一个类似的函数即可。

这里其实没看出继承有什么用。只需将frame、locations、zPosition的设置封装成一个方法即可:

extension CAGradientLayer {
    func configure(view:UIView) {
        self.frame = view.bounds
        self.locations = [0.0, 1.0]
        self.zPosition = -1
    }
}

现在您只需调用configure即可开始配置每个渐变层。您甚至可以向 configure 添加更多参数(例如颜色数组)并将整个参数变成单行:

extension CAGradientLayer {
    func configure(view:UIView, colors:[CGColor]) {
        self.frame = view.bounds
        self.locations = [0.0, 1.0]
        self.zPosition = -1
        self.colors = colors
    }
}

因此,只需调用 configure 即可配置整个层,您就完成了。