简而言之,我有一个混合深蓝色和黑色的渐变。渐变看起来很漂亮,但是当我旋转屏幕并将其置于横向时,两种颜色分开,屏幕的一半为蓝色背景,另一半为黑色。我认为我没有做对,我从这两个来源复制了代码:
YouTube 视频https://www.youtube.com/watch?v=pabNgxzEaRk
网站http://blog.apoorvmote.com/gradient-background-uiview-ios-swift/
这是我的代码:
let topColor = UIColor(red: 28/255.0, green: 25/255.0, blue: 127/255.0, alpha: 1)
let bottomColor = UIColor(red: 0/255.0, green: 0/255.0, blue: 25/255.0, alpha: 1)
let gradientColors: [CGColor] = [topColor.CGColor, bottomColor.CGColor]
let gradientLocations: [Float] = [0.0, 1.0]
let gradientLayer: CAGradientLayer = CAGradientLayer()
gradientLayer.colors = gradientColors
gradientLayer.locations = gradientLocations
gradientLayer.frame = self.view.bounds
self.view.layer.insertSublayer(gradientLayer, atIndex: 0)
Run Code Online (Sandbox Code Playgroud)
有人可以指出我正确的方向以阻止我的渐变分成两部分吗?
请记住,当更改屏幕方向时,所有视图的边界也会更改(假设您使用自动布局),但同样的事情不会应用于以编程方式添加的图层。因此,在您的情况下,渐变层仍然具有根据旋转前的旧视图边界设置的框架。为了解决这个问题,我建议子类化你的渐变视图并layoutSubviews在每个视图边界变化时调用的函数中更新渐变层框架。
class GradientView: UIView {
let gradientLayer = CAGradientLayer()
override func awakeFromNib() {
gradientLayer.frame = self.bounds
gradientLayer.colors = yourColors
gradientLayer.locations = yourLocations
self.layer.addSublayer(gradientLayer)
}
override func layoutSubviews() {
gradientLayer.frame = self.bounds
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2261 次 |
| 最近记录: |