2016-06-17 2 views
0

Короче говоря, у меня есть градиент, представляющий собой смесь Синего и Черного. Градиент выглядит красивым, однако, когда я поворачиваю экран и помещаю его в пейзаж, два цвета разделены, а половина экрана имеет синий фон, а другая половина - черная. Выяснение я не делал это правильно, я скопировал коды из этих двух источников: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) 

Может кто-то мне точку в правильном направлении, чтобы остановить мой градиент от расщепления на две части?

ответ

0

Помните, что при изменении ориентации экрана все изменения также меняются (при условии, что вы используете автоматическую компоновку), но одно и то же не применяется к программно добавленным слоям. Таким образом, в вашем случае градиентный слой по-прежнему имеет фрейм, который устанавливается на основе старых границ представления перед вращением. Чтобы решить эту проблему, я предлагаю подклассифицировать ваш градиентный вид и обновить кадр градиентного слоя в функции 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 
    } 
} 
1

Вам только нужно переопределить метод layoutSubview для AUTORESIZE ваш взгляд градиента относительно точки зрения вашего устройства только

Пишите,

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

Я попытался это и оборотный штраф. Надеюсь, это поможет вам.

Смежные вопросы