2016-06-17 7 views
0

Kurz gesagt, ich habe einen Farbverlauf, der eine Mischung aus Dunkelblau und Schwarz ist. Der Farbverlauf sieht wunderschön aus, aber wenn ich den Bildschirm drehe und in die Landschaft bringe, teilen sich die beiden Farben und die Hälfte des Bildschirms hat einen blauen Hintergrund und die andere Hälfte ist schwarz. Herauszufinden Ich habe es nicht richtig machen, kopiert ich Codes aus diesen beiden Quellen:Swift: Gradient teilt sich bei Rotation

YouTube Video https://www.youtube.com/watch?v=pabNgxzEaRk

Webseite http://blog.apoorvmote.com/gradient-background-uiview-ios-swift/

Das ist mein Code:

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) 

Kann mir jemand zeigen in die richtige Richtung, um zu verhindern, dass mein Gefälle in zwei Teile zerfällt?

Antwort

0

Beachten Sie, dass sich beim Ändern der Bildschirmausrichtung auch alle Begrenzungen der Ansicht ändern (vorausgesetzt, Sie verwenden das automatische Layout), aber dasselbe gilt nicht für programmatisch hinzugefügte Ebenen. In Ihrem Fall hat der Farbverlaufslayer also immer noch den Rahmen, der auf der Grundlage alter Ansichtsgrenzen vor der Drehung festgelegt wurde. Um dies zu lösen, empfehle ich, die Gradientenansicht zu untergliedern und den Farbverlaufsschichtrahmen in der layoutSubviews Funktion zu aktualisieren, die bei jeder Änderung der Ansichtsgrenzen aufgerufen wird.

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

Sie brauchen nur layoutSubview Methode AUTORESIZE Farbverlauf Ansicht in Bezug auf Ihr Gerät nach Ansicht

schreiben nur,

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

Ich versuchte dies und seine adaequat außer Kraft zu setzen. Hoffe das hilft dir.