这是我的渐变背景代码。当我将它应用于我的视图时,它会隐藏在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()
}
}
答案 0 :(得分:1)
喜欢它在前面,其他一切都被推回
因为前面的是。想想你的代码行:
layer.addSublayer(gradientLayer)
将梯度图层放在该图层的所有其他子图层的前面。视图的子视图由其图层的子图层显示,因此渐变图层覆盖此视图的当前子视图。
如果您愿意,可以将图层一直插入后面(insertSublayer:atIndex:
)。但是,优雅的解决方案是为此视图实现the layerClass
class method以返回CAGradientLayer。现在,您不必向GradientView添加渐变;相反,您的GradientView 是渐变,您可以根据需要配置该渐变。