Swift - 重用渐变的代码效率最高的方法?
Posted
技术标签:
【中文标题】Swift - 重用渐变的代码效率最高的方法?【英文标题】:Swift - Most code-efficient way to reuse gradients? 【发布时间】:2016-03-28 16:54:52 【问题描述】:我的 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(等) 但是所有这些新的渐变都将具有精确的帧/位置/zPosition作为gradientLayer。
如何编写我的代码以使这些新渐变继承这些属性?这将使代码更加精简,并且将来易于修改。
谢谢
【问题讨论】:
【参考方案1】:实际上,我在这里看不到通过继承获得了什么。只需将框架、位置和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
的一次调用即可配置整个层,您就完成了。
【讨论】:
【参考方案2】:您可以创建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 属性永远不会改变,所以对我来说必须重写这 10 次没有多大意义。这有意义吗? 完美运行!!谢谢!以上是关于Swift - 重用渐变的代码效率最高的方法?的主要内容,如果未能解决你的问题,请参考以下文章