以下代码用于为视图添加渐变层。将渐变层添加到视图后,如果我尝试在渐变视图中添加新的子视图,则不会显示新视图
func setGradientBackground(_ view: UIView ,colorStart:CGColor ,colorEnd:CGColor,cornerRadius:CGFloat) {
let gradientLayer = CAGradientLayer()
gradientLayer.colors = [colorStart, colorEnd]
gradientLayer.startPoint = CGPoint(x: 0.0, y: 0.5);
gradientLayer.endPoint = CGPoint(x: 1.0, y: 0.5);
gradientLayer.frame = view.bounds
gradientLayer.cornerRadius = cornerRadius
view.layer.addSublayer(gradientLayer)
}
如果我使用UIView扩展类,如何直接从故事板属性检查器设置渐变颜色。我在某些库(波斯菊)中已经看到了这一点,我们可以直接设置评级颜色
答案 0 :(得分:1)
创建uiview的子类并使用gradientLayer覆盖layer属性,而不是添加渐变层
渐变视图:
rows
使用:
@IBDesignable class VerticalGradientView: UIView {
@IBInspectable var topColor: UIColor = UIColor.red {
didSet {
setGradient()
}
}
@IBInspectable var bottomColor: UIColor = UIColor.blue {
didSet {
setGradient()
}
}
override class var layerClass: AnyClass {
return CAGradientLayer.self
}
override func layoutSubviews() {
super.layoutSubviews()
setGradient()
}
private func setGradient() {
(layer as! CAGradientLayer).colors = [topColor.cgColor, bottomColor.cgColor]
(layer as! CAGradientLayer).startPoint = CGPoint(x: 0.5, y: 0)
(layer as! CAGradientLayer).endPoint = CGPoint(x: 0.5, y: 1)
}
}
答案 1 :(得分:0)
您似乎正在直接使用该图层,并将其添加到视图的支持层。我建议一个简单的UIView子类来封装渐变行为。该实现非常简单,最大的好处就是您可以控制在z维度中渲染它的位置。然后,您可以仅将渐变视图用作内容的父视图,或者如果在特定情况下这不合理,则可以使用UIView的UIView.insert(_:,at:)
方法将渐变视图作为子视图插入索引0处。实例。这样会使您的渐变视图显示在稍后添加的其他视图下方。
我最近开始在其中一个应用中使用渐变。这是我用来定义自定义渐变类型的代码。
import UIKit
public class AxialGradientView: UIView {
public var colors: [UIColor] = [] {
didSet {
gradientLayer.colors = colors.map { $0.cgColor }
}
}
/// Expressed in a unit coordinate system.
public var startPoint: CGPoint = CGPoint(x: 0.5, y: 0) {
didSet {
gradientLayer.startPoint = startPoint
}
}
/// Expressed in a unit coordinate system.
public var endPoint: CGPoint = CGPoint(x: 0.5, y: 1) {
didSet {
gradientLayer.endPoint = endPoint
}
}
override public class var layerClass: Swift.AnyClass {
get {
return CAGradientLayer.self
}
}
private var gradientLayer: CAGradientLayer {
return layer as! CAGradientLayer
}
}