首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >快速-最有效的代码重用梯度的方式?

快速-最有效的代码重用梯度的方式?
EN

Stack Overflow用户
提问于 2016-03-28 16:54:52
回答 2查看 376关注 0票数 0

我的UI需要7-10个不同的梯度。

我将第一个(默认)梯度设置为:

代码语言:javascript
运行
复制
let gradientLayer = CAGradientLayer()

在我的viewDidLoad中:

代码语言:javascript
运行
复制
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。

如何编写我的代码,以便这些新的梯度继承这些属性?这将使代码更加简洁,并在将来易于修改。

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-28 17:08:57

您可以创建一个UIView扩展,并通过调用一个方法添加渐变。

代码语言:javascript
运行
复制
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)
    }
}

然后,您可以简单地调用:

代码语言:javascript
运行
复制
self.view.addGradientVariantOne()

只需为每个梯度创建一个类似的函数。

票数 2
EN

Stack Overflow用户

发布于 2016-03-28 17:10:11

实际上,我看不出这里的继承能得到什么。只需将框架、位置和zPosition的设置封装到一个方法中:

代码语言:javascript
运行
复制
extension CAGradientLayer {
    func configure(view:UIView) {
        self.frame = view.bounds
        self.locations = [0.0, 1.0]
        self.zPosition = -1
    }
}

现在您只需调用configure就可以启动每个渐变层的配置。您甚至可以向configure添加更多的参数(例如颜色数组),并将整个过程转换为一行:

代码语言:javascript
运行
复制
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的单个调用就会配置整个层,您就完成了。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36266884

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档