Wie setze ich einen Gradienten UITableViewCell Hintergrund?

7

Ich möchte einen UITableViewCell-Hintergrund mit Farbverlauf erstellen, wie die Standard-Uhr-App auf dem iPhone. Ich weiß nicht genau, wie ich das erreichen soll. Erstelle ich ein Bild und setze es:

%Vor%

oder gibt es einen anderen / besseren Ansatz?

    
Sheehan Alam 18.07.2010, 17:26
quelle

2 Antworten

13

Ich fand die bestehende Antwort auf diese Frage, war aber nicht zufrieden. Hier ist ein alternativer Ansatz, der weniger Code erfordert, keine Methoden überschreiben muss und auf jede Ansicht angewendet werden kann. Die Idee besteht darin, der Ebene CAGradientLayer eine UIView als Unterschicht hinzuzufügen. Ich konnte diesen Ansatz nirgends dokumentiert finden, also wollte ich teilen.

Fügen Sie% CAGradientLayer wie folgt zu einem UIView hinzu:

Kategorie in UIView header - UIView + Gradient.h:

%Vor%

Kategorie in UIView Implementierung UIView + Gradient.m:

%Vor%

Wie wird der Farbverlauf in der Hintergrundansicht von UITableViewCell nach dem Erstellen von UITableViewCell :

festgelegt? %Vor%

In diesem Beispiel wurde nur gezeigt, wie ein einfacher Zwei-Stop-Gradient (mit gleichmäßigem Abstand) eingerichtet wird. Ein kurzer Blick auf die Dokumentation CAGradientLayer zeigt Ihnen, wie Sie komplexere Gradienten einrichten können.

( * BEARBEITEN FÜR ZUSÄTZLICHE WICHTIGE INFORMATIONEN * )

Beachten Sie außerdem, dass die UITableViewCells im Allgemeinen wiederverwendet werden, wenn Sie den Gradienten-Layer in einer Methode wie tableView: cellForRowAtIndexPath hinzufügen (d. h. [tableView dequeueReusableCellWithIdentifier: @ "foo"]). Da Zellen immer wieder verwendet werden, können Sie der Tabellensichtzelle jedes Mal, wenn die Zelle aus der Warteschlange entfernt wird, immer eine Verlaufsebene zu einer Tabellenansichtszelle hinzufügen. Dies kann eine Quelle reduzierter Leistung sein. Dieses Problem kann auftreten, ohne dass die sichtbaren Ergebnisse geändert werden. Daher kann es schwierig sein, es zu erkennen / zu beobachten. Es gibt ein paar Möglichkeiten, dies zu lösen, aber eine Sache, die Sie in Betracht ziehen könnten, ist, den ursprünglichen Code oben zu ändern und zusätzlich CAGradientLayer hinzuzufügen, um die erstellte CAGradiantLayer an den Aufrufer zurückzugeben. Dann ist es ziemlich einfach, eine andere Kategoriemethode zu schreiben, die es ermöglicht, den Gradientenlayer zu entfernen, wenn er tatsächlich in der Ansicht enthalten ist:

%Vor%

Das Entfernen des Farbverlaufs ist nicht für alle Anwendungsfälle erforderlich. Wenn Ihr Anwendungsfall jedoch zur Wiederverwendung von Zellen führt, sollten Sie möglicherweise den Farbverlauf entfernen. Ein Ort, der in Betracht gezogen werden sollte, diese Methode aufzurufen, stammt von der prepareForReuse-Methode der UITableViewCell.

Ich entschuldige mich, dass meine ursprüngliche Lösung dieses Problem nicht behandelt hat. Aber da es etwas sehr subtiles sein kann, wollte ich meine Antwort mit dieser zusätzlichen Information aktualisieren.

    
Chris 18.10.2011 06:35
quelle