我的UI需要7-10个不同的梯度。
我将第一个(默认)梯度设置为:
let gradientLayer = CAGradientLayer()在我的viewDidLoad中:
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 (等等)但是所有这些新的梯度都有确切的框架/位置/ zPosition作为gradientLayer。
如何编写我的代码,以便这些新的梯度继承这些属性?这将使代码更加简洁,并在将来易于修改。
谢谢
发布于 2016-03-28 17:08:57
您可以创建一个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()只需为每个梯度创建一个类似的函数。
发布于 2016-03-28 17:10:11
实际上,我看不出这里的继承能得到什么。只需将框架、位置和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的单个调用就会配置整个层,您就完成了。
https://stackoverflow.com/questions/36266884
复制相似问题