2016-03-28 16 views
0

Meine Benutzeroberfläche erfordert etwa 7-10 verschiedene Gradienten.Swift - Die meisten Code-effiziente Möglichkeit, Gradienten zu verwenden?

Ich habe das erste (default) Gradient wie folgt aufgebaut:

let gradientLayer = CAGradientLayer() 

Und in meinem viewDidLoad:

gradientLayer.frame = self.view.bounds 
gradientLayer.colors = [lightBlue, lightPurple] 
gradientLayer.locations = [0.0, 1.0] 
gradientLayer.zPosition = -1 
self.view.layer.addSublayer(gradientLayer) 

gradientLayer ist der Standard-Farbverlauf. Sagen wir also, ich möchte definieren: gradientVariantOne/gradientVariantTwo/gradientVariantThree (usw.) aber alle diese neuen Gradienten werden das genaue Bild/locations/zPosition als gradientLayer haben.

Wie kann ich meinen Code schreiben, damit diese neuen Verläufe diese Eigenschaften erben? Dadurch wird der Code viel schlanker und in Zukunft einfacher zu ändern sein.

Danke

Antwort

2

Sie eine UIView Erweiterung erstellen und Ihre Gradienten hinzufügen, indem Sie eine Methode aufrufen.

extension UIView { 
    private func prepareGradient() -> CAGradientLayer { 
     let gradientLayer = CAGradientLayer() 
     gradientLayer.frame = self.bounds 
     //add all common setup here 
     return gradientLayer 
    } 

    func addGradientVariantOne() { 
     let gradientLayer = prepareGradient() 
     gradientLayer.colors = [lightBlue, lightPurple] 
     gradientLayer.locations = [0.0, 1.0] 
     gradientLayer.zPosition = -1 
     self.layer.addSublayer(gradientLayer) 
    } 
} 

Dann können Sie einfach anrufen:

self.view.addGradientVariantOne() 

Nur eine ähnliche Funktion für jeden Gradienten erstellen.

+0

Danke für die Antwort. "Erstellen Sie einfach eine ähnliche Funktion für jeden Farbverlauf." - das ist der Teil, den ich vermeiden wollte. Die frame/locations/zPosition-Eigenschaften werden sich nie ändern, so dass es für mich nicht viel Sinn macht, diese 10 mal neu schreiben zu müssen. Ist das sinnvoll? – Joe

+0

Ich habe meine Antwort aktualisiert – Jelly

+0

Funktioniert perfekt !! VIELEN DANK! – Joe

2

Eigentlich sehe ich hier nicht, was durch Vererbung gewonnen wird. kapseln Sie einfach die Einstellung des Rahmens, Orte und zPosition in eine Methode:

extension CAGradientLayer { 
    func configure(view:UIView) { 
     self.frame = view.bounds 
     self.locations = [0.0, 1.0] 
     self.zPosition = -1 
    } 
} 

Jetzt können Sie nur configure nennen begann die Konfiguration der einzelnen Gradientenschicht zu erhalten. Sie könnten noch mehr Parameter configure (wie die Farben Array) und drehen Sie das Ganze in einem Einzeiler hinzuzufügen:

extension CAGradientLayer { 
    func configure(view:UIView, colors:[CGColor]) { 
     self.frame = view.bounds 
     self.locations = [0.0, 1.0] 
     self.zPosition = -1 
     self.colors = colors 
    } 
} 

Somit kann ein einzelner Aufruf configure konfiguriert die ganze Schicht und du bist fertig.