Wie man ein gradient UITableViewCell hintergrund?
Ich würde gern ein Farbverlauf UITableViewCell hintergrund wie die Standard-Uhr-app kommt auf dem iPhone. Ich bin mir nicht ganz sicher, wie Sie Sie zu erreichen, dass. Kann ich ein image erstellen und es:
cell.contentView.backgroundColor = [UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"background.png"]];
oder gibt es einen anderen/besseren Ansatz?
- Ich denke, dies ist der einzige Weg
- Was ist, wenn meine Größe nicht gleich Größe? Wie erstelle ich mein hintergrund-Grafik?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sehen dieses tutorial/code von Matt Coneybeare
Fand ich die bestehende Antwort auf diese Frage, aber war damit nicht zufrieden. Hier ist ein alternativer Ansatz erfordert weniger code, der nicht erforderlich ist, überschreiben alle Methoden und können angewendet werden, um zu einer beliebigen Ansicht. Die Idee ist, fügen Sie ein
CAGradientLayer
als Unterebene derUIView
's Schicht. Ich konnte nicht finden, dass dieser Ansatz dokumentiert irgendwo, also ich teilen wollte.Hinzufügen
CAGradientLayer
zu jedemUIView
wie folgt:Kategorie
UIView
header - UIView+ - Gradienten.h:Kategorie
UIView
implementation UIView+ - Gradienten.m:Wie setzt man den Gradienten auf eine
UITableViewCell
's backgroundView nach dem erstellen derUITableViewCell
:Diesem Beispiel wird nur gezeigt, wie das einrichten eines einfachen zwei-Stopp-gradient (mit uniform spacing). Ein kurzer Blick auf die
CAGradientLayer
Dokumentation zeigt Ihnen, wie Sie das setup komplexer Verläufe.(* BEARBEITEN SIE WEITERE WICHTIGE INFORMATIONEN *)
Eine weitere Sache im Auge zu behalten ist, dass, wenn Sie sind das hinzufügen der verlaufsebene in eine Methode wie tableView:cellForRowAtIndexPath, die UITableViewCells sind im Allgemeinen wiederverwendet werden (D. H. [tableView dequeueReusableCellWithIdentifier:@"foo"]). Da die Zellen werden erneut verwendet, wenn Sie fügen immer einen Gradienten-layer, um eine table view cell jedes mal, wenn die Zelle aus der Warteschlange entfernt, können Sie am Ende hinzufügen von mehreren Gradienten-Layer, um die tableview Zelle über die gesamte Lebensdauer der Zelle. Dies kann eine Quelle der reduzierten Leistung. Dieses problem kann auftreten, ohne Veränderung der sichtbaren Ergebnisse, so kann es schwierig sein zu erkennen/beobachten. Es gibt ein paar Möglichkeiten, um dieses Problem zu lösen, aber eine Sache, die Sie vielleicht in Erwägung ziehen, ist eine änderung der ursprünglichen code oben, um zusätzlich zu den CAGradientLayer zurückgeben erstellt CAGradientLayer an den Aufrufer. Dann ist es relativ einfach, schreiben Sie eine weitere Kategorie Methode, die es erlaubt die Gradienten Schicht entfernt werden, wenn Sie tatsächlich in der Ansicht enthaltenen:
Entfernen der Farbverlauf ist nicht erforderlich, für alle Anwendungsfälle, aber wenn Sie Ihre use-case-Ergebnisse in Zelle wiederverwenden, möchten Sie vielleicht zu prüfen, entfernen Sie den Verlauf. Ein Ort zu prüfen, hat der Aufruf dieser Methode ist von der UITableViewCell ' s prepareForReuse Methode.
Ich entschuldige mich, dass meine ursprüngliche Lösung nicht, dieses Problem anzugehen. Aber da es etwas ist, dass sehr subtil, wollte ich update meine Antwort mit diesen zusätzlichen Informationen.