2017-06-19 4 views
1

Ich habe ein Problem im Zusammenhang mit Einstellung Steigungen für Etiketten und Tasten anzutreffen. Ich weiß, dass diese Frage viel gestellt wurde, aber keine Antwort schien mein Problem zu lösen. Hier ist der Bildschirm, wie ich es aussehen soll:Swift - Arbeiten mit Gradients

enter image description here

Dies ist mein Code:

@IBOutlet weak var loginButton: UIButton! 
    @IBOutlet weak var signUpButton: UIButton! 
    @IBOutlet weak var logoLabel: UILabel! 


    override func viewDidLoad() { 
     super.viewDidLoad() 

     loginButton.backgroundColor = UIColor.clear 
     let loginButtonGradient = createBlueGreenGradient(from: loginButton.bounds) 
     self.view.layer.insertSublayer(loginButtonGradient, at: 0) 

     signUpButton.backgroundColor = UIColor.clear 
     let signUpButtonGradient = createBlueGreenGradient(from: signUpButton.bounds) 
     self.view.layer.insertSublayer(signUpButtonGradient, at: 0) 

     logoLabel.backgroundColor = UIColor.clear 
     let logoLabelGradient = createBlueGreenGradient(from: logoLabel.bounds) 
     self.view.layer.insertSublayer(logoLabelGradient, at: 0) 

     loginButton.layer.cornerRadius = 100 
     signUpButton.layer.cornerRadius = 100 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
    } 

    func createBlueGreenGradient(from bounds: CGRect) -> CAGradientLayer{ 
     let topColor = UIColor(red: 84/255, green: 183/255, blue: 211/255, alpha: 1) 
     let bottomColor = UIColor(red: 119/255, green: 202/255, blue: 151/255, alpha: 1) 
     let gradientColors: [UIColor] = [topColor, bottomColor] 

     let gradientLocations: [NSNumber] = [0.0, 1.0] 

     let gradientLayer = CAGradientLayer() 
     gradientLayer.colors = gradientColors 
     gradientLayer.locations = gradientLocations 
     gradientLayer.frame = bounds 

     return gradientLayer 
    } 

Und das ist das falsche Ergebnis:

enter image description here

Jemand bitte Hilf mir. Ich bin mir nicht sicher, was ich falsch mache.

+0

Mögliche Duplikate von [Wie Gradient auf die Hintergrundansicht der iOS Swift App angewendet wird] (https: // stackoverflow.com/questions/24380535/how-to-apply-gradient-zu-hintergrund-view-of-ios-swift-app) –

Antwort

1

Es gibt viele Probleme mit Ihrem Code.

  • Teilen Sie die Farbe mit Float Nummer statt Int bedeutet es 255.0 sollte nicht 255.
  • Jetzt für colors Eigenschaft von CAGradientLayer müssen Sie Array von CGColor nicht Array von UIColor setzen.
  • gesetzt Auch startPoint und endPoint Eigenschaft CAGradientLayer horizontalen Farbverlauf zu machen.
  • Derzeit fügen Sie diesen GradientLayer in Ihrem self.view statt seiner spezifischen Taste.
  • Stellen Sie die cornerRadius Ihrer Taste auf Grundlage ihrer Höhe nicht mit einer Konstanten 100 auch nach cornerRadius Einstellung auch masksToBounds Eigenschaft der Schicht true festlegen müssen.
  • Jetzt für Ihr Logo-Label, können Sie nicht textColor als Gradient Farbe gesetzt direkt, was Sie tun müssen, ist die gewünschte Steigung auf einem UIImage zu ziehen und verwenden Sie dann, dass UIImage das Farbmuster für Ihre Label Prüfung einstellen diese SO reference dafür.

Nach all dem Durchführen von Änderungen des Code sein sollte.

func createBlueGreenGradient(from bounds: CGRect) -> CAGradientLayer{ 
    let topColor = UIColor(red: 84/255.0, green: 183/255.0, blue: 211/255.0, alpha: 1).cgColor 
    let bottomColor = UIColor(red: 119/255.0, green: 202/255.0, blue: 151/255.0, alpha: 1).cgColor 
    let gradientColors = [topColor, bottomColor] 

    let gradientLocations: [NSNumber] = [0.0, 1.0] 
    let gradientLayer = CAGradientLayer() 
    gradientLayer.colors = gradientColors 
    gradientLayer.locations = gradientLocations 
    //Set startPoint and endPoint property also 
    gradientLayer.startPoint = CGPoint(x: 0, y: 0) 
    gradientLayer.endPoint = CGPoint(x: 1, y: 0) 
    gradientLayer.frame = bounds 
    return gradientLayer 
} 

gesetzt Jetzt gradientLayer in viewDidLoad auf diese Weise.

override func viewDidLoad() { 
    super.viewDidLoad() 

    let loginButtonGradient = createBlueGreenGradient(from: loginButton.bounds) 
    self.loginButton.layer.insertSublayer(loginButtonGradient, at: 0) 

    let signUpButtonGradient = createBlueGreenGradient(from: signUpButton.bounds) 
    self.signUpButton.layer.insertSublayer(signUpButtonGradient, at: 0) 

    loginButton.layer.cornerRadius = loginButton.frame.size.height/2 
    loginButton.layer.masksToBounds = true 
    signUpButton.layer.cornerRadius = signUpButton.frame.size.height/2 
    signUpButton.layer.masksToBounds = true 
} 
1

Oh meine Güte hatte ich das gleiche Problem, aber spielte mit ihm um. Dies liegt daran, dass Sie .cgcolor nicht hinzugefügt haben. Zum Beispiel:

let topColor = UIColor(red: 84/255, green: 183/255, blue: 211/255, alpha: 1).cgColor 
let bottomColor = UIColor(red: 119/255, green: 202/255, blue: 151/255, alpha: 1).cgColor 
let gradientColors = [topColor, bottomColor] 

Lassen Sie mich wissen, ob es funktioniert.

+0

Ja, das hat funktioniert, danke –

1

Ihre Methode wie folgt:

func createBlueGreenGradient(from bounds: CGRect) -> CAGradientLayer{ 
    let topColor = UIColor(red: 84/255, green: 183/255, blue: 211/255, alpha: 1).cgColor 
    let bottomColor = UIColor(red: 119/255, green: 202/255, blue: 151/255, alpha: 1).cgColor 
    let gradientColors = [topColor, bottomColor] 

    let gradientLocations: [NSNumber] = [0.0, 1.0] 

    let gradientLayer = CAGradientLayer() 
    gradientLayer.colors = gradientColors 
    gradientLayer.locations = gradientLocations 
    gradientLayer.frame = bounds 

    return gradientLayer 
    } 
Verwandte Themen