【问题标题】:Swift: Gradient splits on rotationSwift:旋转时的梯度分裂
【发布时间】:2016-06-17 11:23:08
【问题描述】:

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

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)

谁能指出我正确的方向以阻止我的渐变一分为二?

【问题讨论】:

    标签: swift gradient


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      您只需要覆盖 layoutSubview 方法即可根据您的设备视图自动调整渐变视图的大小

      只写,

      override func viewDidLayoutSubviews() {
          gradientLayer.frame = self.view.bounds
      }
      

      我试过了,它工作正常。希望对您有所帮助。

      【讨论】:

        猜你喜欢
        • 2014-12-18
        • 1970-01-01
        • 1970-01-01
        • 2014-01-27
        • 2021-10-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多