Swift - 重用梯度的最具代码效率的方法?

时间:2016-03-28 16:54:52

标签: ios swift cagradientlayer gradients

我的UI需要大约7到10个不同的渐变。

我有第一个(默认)渐变设置如下:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>The Scala.js Experimental</title>
  </head>
  <body>
    <!-- Include JavaScript dependencies -->
    <script type="text/javascript" src="./sjsexp2/js/target/scala-2.11/sjsexp2js-test-jsdeps.js"></script>
    <!-- Include Scala.js compiled code -->
    <script type="text/javascript" src="./sjsexp2/js/target/scala-2.11/sjsexp2js-test-fastopt.js"></script>

    <script type="text/javascript">
    $(function(){
    package.ClassName().mainFunction();
    })
    </script>

  </body>
</html>

在我的viewDidLoad中:

let gradientLayer = CAGradientLayer()

gradientLayer是默认渐变。所以,我想说我要定义: gradientVariantOne / gradientVariantTwo / gradientVariantThree(等) 但是所有这些新渐变都将具有精确的frame / locations / zPosition作为gradientLayer。

如何编写代码以便这些新渐变继承这些属性?这将使代码更加精简,并且将来很容易修改。

谢谢

2 个答案:

答案 0 :(得分: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()

为每个渐变创建一个类似的函数。

答案 1 :(得分:2)

实际上我没有看到继承在这里获得了什么。只需将框架,位置和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的单次调用会配置整个图层,您就完成了。