2015-08-06 24 views
7

Ho un UITableView dove la mia cella backgroundView è una UIImageView. Vorrei che la parte superiore di ogni immagine si dissolvesse in nero in modo da poter sovrapporre del testo bianco.Dissolvenza da iOS a nero in cima a UIImageView

Ho visto alcune risposte come this, ma nessuna sembra funzionare.

In tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) ho provato:

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 

Ma vedo nessuna sfumatura e nessuna differenza da quando viene rimosso il codice gradiente. La mia sfumatura è seduta sotto l'immagine?

Se sostituisco la riga imageView.layer.insertSublayer(gradient, atIndex: 0) con imageView.layer.mask = gradient, le mie celle sono solo bianche e vuote (nessuna immagine).

+1

io sono il manifesto della risposta si è collegato al . Si noti che 'gradient.colors' dovrebbe contenere' CGColor's e non 'UIColor's. – duci9y

+1

Congratulo con 3k;) – jezrael

risposta

8

Nella tua gradient.colors è necessario disporre di serie di CGColor, quindi:

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

Oh, stava usando UIColors, non è vero? Buona pesca. Ho perso questo. –

3

Ho dimenticato come è ordinato l'array di livelli. Tuttavia, dovresti semplicemente aggiungere il tuo livello sfumato sopra il livello della vista dell'immagine usando addSubLayer, non insertSublayer: atIndex: vuoi il livello sfumatura sopra l'altro livello in modo che le parti non opache coprano la vista dell'immagine.

+0

Entrambi funzionano per me con la correzione CGColor dalla risposta accettata, ma sì, addSubLayer è decisamente più semplice. – Imran

2

per SWIFT 3.0, alcune lievi modifiche richieste:

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) 
Problemi correlati