2016-07-16 18 views
0

Ich versuche, UIView programmgesteuert Gradienten hinzuzufügen, aber es funktioniert nicht. Es scheint nur keine Farbe zu haben. Ich habe den entsprechenden Code sowie einen Screenshot beigefügt. Beachten Sie das untere Quadrat, über das ich den Verlauf anwende. Kann mir jemand helfen, herauszufinden, was ich hier falsch mache?Anwenden von Farbverlauf auf einem UIView funktioniert nicht

Screenshot

let sundayView = UIView() 

override func viewDidLoad() { 
    super.viewDidLoad() 
    setupViews() 
    setupSundayView() 
} 

func setupViews() { 
    sundayView.translatesAutoresizingMaskIntoConstraints = false 
    view.addSubview(sundayView) 
} 

func setupSundayView() { 
    sundayView.translatesAutoresizingMaskIntoConstraints = false 

    NSLayoutConstraint.activateConstraints([ 
     sundayView.centerXAnchor.constraintEqualToAnchor(view.centerXAnchor), 
     sundayView.topAnchor.constraintEqualToAnchor(fridayView.bottomAnchor, constant: 16.0), 
     sundayView.trailingAnchor.constraintEqualToAnchor(view.trailingAnchor, constant: -8.0),    
     sundayView.heightAnchor.constraintEqualToAnchor(mondayView.heightAnchor), 
     sundayView.widthAnchor.constraintEqualToAnchor(mondayView.widthAnchor) 
     ]) 

    let gradient = CAGradientLayer() 
    gradient.frame = sundayView.bounds 
    gradient.colors = [ 
     UIColor(red:1.00, green:0.37, blue:0.23, alpha:1.0).CGColor, 
     UIColor(red:1.00, green:0.16, blue:0.41, alpha:1.0).CGColor 
    ] 
    sundayView.layer.insertSublayer(gradient, atIndex: 0) 
} 
+0

Haben Sie nicht vergiss das 'QuartzCore' Framework zu importieren? –

+0

Ich denke, es ist nicht notwendig. Ich habe versucht, Gradient auf meine Superview anzuwenden. Es funktionierte ohne zu importieren. –

Antwort

1

Ihr Gradient wird nicht geschaltet, da die bounds für sundayView nicht sein Set bis Auto Layout läuft. Überschreiben Sie viewDidLayoutSubviews und stellen Sie den Farbverlauf dort ein.

Fügen Sie diese Eigenschaft auf Ihren Viewcontroller:

var sundayGradient: CAGradientLayer? 

In setupSundayView die gradient die Immobilie sparen:

let gradient = CAGradientLayer() 
sundayGradient = gradient 

dann den Rahmen gesetzt in viewDidLayoutSubviews:

override func viewDidLayoutSubviews() { 
    super.viewDidLayoutSubviews() 

    sundayGradient?.frame = sundayView.bounds 
} 
+0

Ummm .. Sorry, ich habe Probleme zu verstehen _Stellen Sie den Gradienten auf it_ code.Prust, kann bitte nochmal erklären? :) –

+1

in 'setupSundayView' nach der Zeile' gradient = CAGradientLayer() 'fügen Sie die Zeile' sundayGradient = gradient' hinzu. – vacawama

+0

Danke! Es hat funktioniert :) Aber es bricht eine andere Codezeile, die ich hinzugefügt habe: 'sundayView.layer.cornerRadius = 5'. –

0

Es scheint, dass Sie locations hinzufügen vergessen Schicht Gradienten, versuchen Sie es wie folgt aus:

func setupSundayView() { 
    sundayView.translatesAutoresizingMaskIntoConstraints = false 

    NSLayoutConstraint.activateConstraints([ 
     sundayView.centerXAnchor.constraintEqualToAnchor(view.centerXAnchor), 
     sundayView.topAnchor.constraintEqualToAnchor(fridayView.bottomAnchor, constant: 16.0), 
     sundayView.trailingAnchor.constraintEqualToAnchor(view.trailingAnchor, constant: -8.0),    
     sundayView.heightAnchor.constraintEqualToAnchor(mondayView.heightAnchor), 
     sundayView.widthAnchor.constraintEqualToAnchor(mondayView.widthAnchor) 
     ]) 

    let gradient = CAGradientLayer() 
    gradient.frame = sundayView.bounds 
    gradient.colors = [ 
     UIColor(red:1.00, green:0.37, blue:0.23, alpha:1.0).CGColor, 
     UIColor(red:1.00, green:0.16, blue:0.41, alpha:1.0).CGColor 
    ] 
    gradient.locations = [0.0, 0.5] 
    sundayView.layer.insertSublayer(gradient, atIndex: 0) 
} 
+0

Funktioniert immer noch nicht. :( –

+0

Ok, in Ihrem 'viewDidLoad' versuchen Sie 'setupSundayView()' vor 'setupViews()' aufzurufen. –

+0

Es sind die sundayView Frames. Ich habe versucht, sundayView.frame.size = CGSize (width: 130, height: 130) Es hat funktioniert –