2016-08-07 8 views
1

So zur Zeit arbeite ich mit einem Tableviewcontroller, aber ich will es auf jede Zelle wie ein Gradient Tableview sein, wie in dem BildTableViewCell Hintergrund Color Gradient

gezeigt

enter image description here

Gibt es eine gute Art und Weise zu erreichen, basierend auf der Größe des Arrays, mit dem ich die Tabelle ausfülle?

Antwort

2

Wenn Sie nur zwischen zwei Farben interpolieren möchten, können Sie zwischen jeder RGB-Farbkomponente interpolieren (Sie könnten dies auch mit HSB tun).

Definieren Sie eine Start- und Endfarbe. Ich wählte eine Tupel Darstellung:

typealias Color = (red: CGFloat, green: CGFloat, blue: CGFloat, alpha: CGFloat) 

let startColor: Color = (red: 0.0/255, green: 114.0/255.0, blue: 96.0/255.0, alpha: 1.0) 
let endColor: Color = (red: 10.0/255.0, green: 188.0/255.0, blue: 161.0/255.0, alpha: 1.0) 

die Anzahl der Schritte ermitteln und die Schrittgröße für jede Farbkomponente:

var data = [/* ... */] 
let steps = data.count > 1 ? CGFloat(data.count - 1) : 1.0 
let rStep = (endColor.red - startColor.red)/steps, 
    gStep = (endColor.green - startColor.green)/steps, 
    bStep = (endColor.blue - startColor.blue)/steps, 
    aStep = (endColor.alpha - startColor.alpha)/steps 

schließlich in Ihrem cellForRowAtIndexPath:

let rowIdx = CGFloat(indexPath.row) 
myCell.backgroundColor = UIColor(red: startColor.red + rowIdx * rStep, green: startColor.green + rowIdx * gStep, blue: startColor.blue + rowIdx * bStep , alpha: startColor.alpha + rowIdx * aStep) 

Wenn Ihr Handy Wenn Sie Änderungen zählen, möchten Sie natürlich die Schrittgröße für jede Farbkomponente neu berechnen.

Das Ergebnis auf einem Spielplatz:

enter image description here

+0

ehrfürchtige Antwort Dank! nur noch eine frage der zweite schritt, all diese berechnung wo deklariere ich sie ?, ich frage das, weil es mir einen fehler wirft "Instanz member 'kategorien' kann nicht auf typ 'HomeVC'" –

+1

@CesarMtz verwendet werden Sie können jede Schrittvariable als Instanzvariable auf Ihrem View-Controller beibehalten und sie aktualisieren, wenn sich Ihre Datenanzahl ändert. In diesem Fall könnten Sie die Berechnung in eine Funktion einfügen, die von 'viewDidLoad' aufgerufen wird. Die einzige Sache ist, dass Sie nicht wollen, dass dieser Code für _every_ 'cellForRowAtIndexpath' aufgerufen wird, da sich die Schrittgrößen nur ändern, wenn sich Ihre Datenanzahl ändert, und Sie daher unnötige Berechnungen durchführen. –

+0

Super Danke !! –