用Swift制作渐变背景-正确的方法

用Swift制作渐变背景-正确的方法,swift,cagradientlayer,ibdesignable,Swift,Cagradientlayer,Ibdesignable,这是我的渐变背景代码。当我在我的视图中应用它时,它会隐藏我在VC上的所有内容,就像它在前面一样,其他所有内容都会被向后推。如何创建不干扰元素的渐变视图 我使用@IBDesignable只是想看看它在情节提要中的效果如何 import UIKit @IBDesignable class GradientView: UIView { private let gradientLayer = CAGradientLayer() var color1 = ColorPalette.G

这是我的渐变背景代码。当我在我的视图中应用它时,它会隐藏我在VC上的所有内容,就像它在前面一样,其他所有内容都会被向后推。如何创建不干扰元素的渐变视图

我使用
@IBDesignable
只是想看看它在情节提要中的效果如何

import UIKit

@IBDesignable
class GradientView: UIView {

    private let gradientLayer = CAGradientLayer()

    var color1 = ColorPalette.GrdTop
    var color2 = ColorPalette.GrdBottom

    override init(frame: CGRect) {
        super.init(frame: frame)
        configureGradient()
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        configureGradient()
    }

    func configureGradient() {
        gradientLayer.startPoint = CGPoint(x: 0, y: 0)
        gradientLayer.endPoint = CGPoint(x: 1, y: 1)
        updateColors()
        layer.addSublayer(gradientLayer)
    }

    override func layoutSubviews() {
        super.layoutSubviews()
        gradientLayer.frame = bounds
    }

    private func updateColors() {
        gradientLayer.colors = [color1.CGColor, color2.CGColor]
    }

    override func prepareForInterfaceBuilder() {
        super.prepareForInterfaceBuilder()
        configureGradient()
    }
}
就像它在前面,其他的东西都被推倒了

因为它在前面。想想你的这一行代码:

layer.addSublayer(gradientLayer)
这将梯度层置于该层所有其他子层的前面。视图的子视图由其层的子层显示,因此渐变层覆盖该视图的当前子视图


如果愿意,您可以将图层一直插入背面(
insertSublayer:atIndex:
)。不过,优雅的解决方案是实现此视图以返回CAGradientLayer。现在,您不必向GradientView添加渐变;相反,您的GradientView是一个渐变,您可以根据需要配置该渐变。

如果我没有弄错的话,@Kira Arik可能还想为
CAGradientLayer()设置一个掩码。
感谢您的建议,但目前我似乎很难做到这一点。我还是个初学者,所以。。。我可能得请人帮我做这件事。无论如何,谢谢你。