我对Swift比较陌生。我只是想设计出租车应用而已。
我发现了CGGradientLayer
,并认为它将为应用程序的顶部栏带来不错的效果。
我添加了它,由于某种原因,它没有完全扩展到视图宽度。
这是我的子类:
import UIKit
class GradientView: UIView {
let gradient = CAGradientLayer()
override func awakeFromNib() {
setupGradientView()
}
func setupGradientView() {
gradient.frame = self.frame
gradient.colors = [UIColor.white.cgColor, UIColor.init(white: 1.0, alpha: 0.0).cgColor]
gradient.startPoint = CGPoint.zero
gradient.endPoint = CGPoint(x: 0, y: 1)
gradient.locations = [0.9, 1.0]
self.layer.addSublayer(gradient)
}
}
这就是结果。
绿色背景实际上是也应用子类的UIView
的宽度。
答案 0 :(得分:4)
您太早设置了渐变的frame
。您应该在override
的{{1}}中进行设置:
layoutSubviews
注意:
override func layoutSubviews() {
super.layoutSubviews()
gradient.frame = self.bounds
}
。那就是视图内部使用的坐标系。相对于self.bounds
放置渐变,并且如果GradientView
放置在屏幕上的其他位置,则渐变不会更改(因为在这种情况下GradientView
不会更改,但是{ {1}})。bounds
中设置frame
,您将始终获得视图大小的最新值。