2015-08-06 3 views
7

Ich habe eine UITableView wo meine Zelle backgroundView ist ein UIImageView. Ich möchte, dass die obere Hälfte jedes Bildes schwarz wird, damit ich etwas weißen Text überlagern kann.iOS Fade zu schwarz am oberen Rand von UIImageView

Ich habe mir einige Antworten wie this angesehen, aber keine scheint zu funktionieren.

In tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) Ich habe versucht:

var imageView = UIImageView(image: image) 

var gradient: CAGradientLayer = CAGradientLayer() 
gradient.frame = imageView.frame 
gradient.colors = [UIColor.blackColor(), UIColor.clearColor()] 
gradient.locations = [0.0, 0.1] 
imageView.layer.insertSublayer(gradient, atIndex: 0) 

cell!.backgroundView = imageView 

Aber ich sehe keinen Gradienten und keinen Unterschied aus, wenn ich den Gradienten Code entfernen. Sitzt mein Farbverlauf unter dem Bild?

Wenn ich die Zeile imageView.layer.insertSublayer(gradient, atIndex: 0) durch imageView.layer.mask = gradient ersetzen, dann sind meine Zellen nur leer und weiß (kein Bild mehr).

+1

Ich bin das Plakat der Antwort, die Sie im Zusammenhang mit . Bitte beachten Sie, dass 'gradient.colors'' CGColor's und nicht 'UIColor's enthalten sollte. – duci9y

+1

Congrat to 3k;) – jezrael

Antwort

8

In Ihrem gradient.colors müssen Sie Array von CGColor haben, so:

gradient.colors = [UIColor.blackColor().CGColor, UIColor.clearColor().CGColor] 
+0

Oh, er benutzte UIColors, oder? Guter Fang. Das habe ich vermisst. –

3

Ich vergesse, wie die Ebenen Array angeordnet ist. Sie sollten jedoch Ihre Farbverlaufsschicht mit addSubLayer oben auf der Ebene Ihrer Bildansicht hinzufügen, nicht insertSublayer: atIndex: Sie möchten, dass die Farbverlaufsebene über der anderen Ebene liegt, sodass die Bildansicht durch nicht transparente Bereiche abgedeckt wird.

+0

Beide funktionieren für mich mit dem CGColor Fix aus der akzeptierten Antwort, aber ja, addSubLayer ist definitiv unkomplizierter. – Imran

2

für Swift 3.0, einige geringfügige Verbesserungen erforderlich:

let gradient: CAGradientLayer = CAGradientLayer() 
    gradient.frame = imageView.frame 
    gradient.colors = [UIColor.black.cgColor, UIColor.clear.cgColor] 
    gradient.locations = [0.0, 0.1] 
    imageView.layer.insertSublayer(gradient, at: 0) 
Verwandte Themen