-1

这是我的渐变背景代码。当我将它应用到我的视图上时,它会隐藏我在那个 VC 上的所有东西,就像它在前面,而其他所有东西都被推后。如何制作不干扰元素的渐变视图?

@IBDesignable只是用来看看它在 Storyboard 中的外观。

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()
    }
}
4

1 回答 1

1

就像它在前面,其他一切都被推后

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

layer.addSublayer(gradientLayer)

这会将渐变层置于该层的所有其他子层之前。视图的子视图由其层的子层显示,因此渐变层覆盖了该视图的当前子视图。

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

于 2016-05-13T14:20:38.643 回答