我的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。
如何编写代码以便这些新渐变继承这些属性?这将使代码更加精简,并且将来很容易修改。
谢谢
答案 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
的单次调用会配置整个图层,您就完成了。