我想在我的所有 View 中放置渐变背景。
我认为不需要在所有 View Controller 中创建 View 的 IBOutlet 的方法是从 UIView 创建一个新类,在 draw() 中,我将创建 CAGradientLayer 的代码放在 View 中。
因此,在界面构建器中,我只需要选择背景 View 并将其类设置为我的自定义类。到目前为止它有效。
我的问题是我是否可以毫无问题地做到这一点。有人知道可以吗?
因为继承自 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)
}
最佳答案
您可以使用 @IBDesignable
和 @IBInspectable
从 Storyboard
配置 startColor 和 endColor 属性。如果要在 draw(_ rect:) 方法中绘制,请使用指定颜色和位置的 CGGradient
而不是 CAGradientLayer。 Simple Gradient 类和 draw(_ rect: CGRect)
函数如下所示
import UIKit
@IBDesignable
class GradientView: UIView {
@IBInspectable var startColor: UIColor = UIColor(red: 4/255, green: 39/255, blue: 105/255, alpha: 1)
@IBInspectable var endColor: UIColor = UIColor(red: 1/255, green: 91/255, blue: 168/255, alpha: 1)
override func draw(_ rect: CGRect) {
let context = UIGraphicsGetCurrentContext()!
let colors = [startColor.cgColor, endColor.cgColor]
let colorSpace = CGColorSpaceCreateDeviceRGB()
let colorLocations: [CGFloat] = [0.0, 1.0]
let gradient = CGGradient(colorsSpace: colorSpace,
colors: colors as CFArray,
locations: colorLocations)!
let startPoint = CGPoint.zero
let endPoint = CGPoint(x: 0, y: bounds.height)
context.drawLinearGradient(gradient,
start: startPoint,
end: endPoint,
options: [CGGradientDrawingOptions(rawValue: 0)])
}
}
您可以阅读有关它的更多信息 here 和 tutorial
关于ios - 使用 swift 在 UIView draw() 中绘制渐变,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47869179/