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
即可配置整个层,您就完成了。
我的 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
即可配置整个层,您就完成了。