Ios Swift-重用渐变的最有效的代码方式?
我的UI需要大约7-10种不同的渐变 我有如下设置的第一个(默认)渐变:Ios Swift-重用渐变的最有效的代码方式?,ios,swift,cagradientlayer,gradient,Ios,Swift,Cagradientlayer,Gradient,我的UI需要大约7-10种不同的渐变 我有如下设置的第一个(默认)渐变: let gradientLayer = CAGradientLayer() 在我看来: gradientLayer.frame = self.view.bounds gradientLayer.colors = [lightBlue, lightPurple] gradientLayer.locations = [0.0, 1.0] gradientLayer.zPosition = -1 self.view.layer
let gradientLayer = CAGradientLayer()
在我看来:
gradientLayer.frame = self.view.bounds
gradientLayer.colors = [lightBlue, lightPurple]
gradientLayer.locations = [0.0, 1.0]
gradientLayer.zPosition = -1
self.view.layer.addSublayer(gradientLayer)
gradientLayer是默认的渐变。假设我想定义:
渐变色差色调/渐变色差两个/渐变色差三个(等)
但所有这些新渐变都将具有与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()
只需为每个渐变创建一个类似的函数。您可以创建一个
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()
只需为每个渐变创建一个类似的函数。事实上,我看不出继承会带来什么。只需将帧、位置和zPosition的设置封装到一个方法中:
extension CAGradientLayer {
func configure(view:UIView) {
self.frame = view.bounds
self.locations = [0.0, 1.0]
self.zPosition = -1
}
}
现在您只需调用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
的一次调用就可以配置整个层,您就完成了。实际上,我看不出继承会带来什么好处。只需将帧、位置和zPosition的设置封装到一个方法中:
extension CAGradientLayer {
func configure(view:UIView) {
self.frame = view.bounds
self.locations = [0.0, 1.0]
self.zPosition = -1
}
}
现在您只需调用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
即可配置整个层,您就完成了。感谢您的回复。“为每个梯度创建一个类似的函数。”-这是我希望避免的部分。frame/locations/zPosition属性永远不会改变,所以我不需要重写这10次。这有意义吗?非常有效!!谢谢谢谢你的回复。“为每个梯度创建一个类似的函数。”-这是我希望避免的部分。frame/locations/zPosition属性永远不会改变,所以我不需要重写这10次。这有意义吗?非常有效!!谢谢