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 - 重用渐变的代码效率最高的方法?的主要内容,如果未能解决你的问题,请参考以下文章

swift里类方法和构造方法的使用来减少代码冗余提高开发效率

java排序,效率高的是哪种排序方法

使工作线程等待任务的 CPU 效率最高的方法是啥?

最高效率的对象深拷贝通用方法

你研究过单例么?这样写单例效率最高.

JAVA代码效率优化