Swift:旋转时渐变分裂

Bri*_*ibe 2 gradient swift

简而言之,我有一个混合深蓝色和黑色的渐变。渐变看起来很漂亮,但是当我旋转屏幕并将其置于横向时,两种颜色分开,屏幕的一半为蓝色背景,另一半为黑色。我认为我没有做对,我从这两个来源复制了代码:

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)

有人可以指出我正确的方向以阻止我的渐变分成两部分吗?

Zel*_* B. 6

请记住,当更改屏幕方向时,所有视图的边界也会更改(假设您使用自动布局),但同样的事情不会应用于以编程方式添加的图层。因此,在您的情况下,渐变层仍然具有根据旋转前的旧视图边界设置的框架。为了解决这个问题,我建议子类化你的渐变视图并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)