我想在我的所有视图中添加渐变背景 .
我想这样做而不需要在所有视图控制器中创建视图的IBOutlet的方式是从UIView创建一个新类,并在draw()内部放置在视图中生成CAGradientLayer的代码 .
因此,在界面构建器中,我只需要选择背景视图并将其类设置为我的自定义类 . 它到目前为止工作 .
我的问题是,如果我可以毫无问题地做到这一点 . 有人知道可以吗?因为从UIView继承的模型文件带有注释://如果执行自定义绘图,则仅覆盖draw() .
我不知道创建图层是否重要 . 或者,如果draw()仅适用于低级别绘图或类似的东西 . 对draw()函数的最佳用法一无所知 .
这是代码:
override func draw(_ rect: CGRect) {
let layer = CAGradientLayer()
layer.frame = CGRect(x: 0, y: 0, width: self.frame.width, height: self.frame.height)
let color1 = UIColor(red: 4/255, green: 39/255, blue: 105/255, alpha: 1)
let color2 = UIColor(red: 1/255, green: 91/255, blue: 168/255, alpha: 1)
layer.colors = [color1.cgColor, color2.cgColor]
self.layer.addSublayer(layer)
}
3 回答
您可以使用
@IBDesignable
和@IBInspectable
配置Storyboard
中的startColor和endColor属性 . 如果要使用draw(_ rect :)方法绘制,请使用CGGradient
指定颜色和位置而不是CAGradientLayer . Simple Gradient类和draw(_ rect: CGRect)
函数看起来像这样你可以阅读更多关于它here和tutorial
您不应该在
draw
函数中添加CAGradientLayer .如果你想为一个视图添加一个渐变,那么最简单的方法是使用一个图层(就像你正在做的那样),但不是这样...
您应该将它作为init方法的一部分添加到视图中,然后在布局子视图方法中更新其框架 .
像这样......
我会创建UIView扩展并在需要时应用它 .
在这里,您可以更改func声明以将
startPoint
,endPoint
和locations
参数指定为变量 .之后只需调用此方法即可
附:请注意,您可以在
colors
数组中获得所需的颜色