Einstellung Eckenradius auf eine Zelle tötet UICollectionView Leistung
Ich habe eine UICollectionView
hat, dass nur wenige Zellen (etwa 20). Die Leistung für diese Sammlung funktioniert Super. Allerdings, sobald ich versuche, Runde die Ecken der UICollectionViewCells
, die gerendert werden von dieser Sicht, meine Leistungsfähigkeit nimmt einen bedeutenden Treffer. In meiner Zelle ist die init-Methode, dies ist die einzige Linie, die ich hinzufügen Ursache:
[self.layer setCornerRadius:15];
Da dies in der init-Methode und ich bin der Wiederverwendung der Zellen richtig, ich verstehe nicht, warum das sein sollte, was mich Problem.
Ich habe versucht, die Anpassung der Rasterung und die Deckkraft der verkaufen mit mehreren Kombinationen der folgenden, mit der noch keine Wirkung:
[self.layer setMasksToBounds:YES];
[self.layer setCornerRadius:15];
[self.layer setRasterizationScale:[[UIScreen mainScreen] scale]];
self.layer.shouldRasterize = YES;
self.layer.opaque = YES;
Ist Ihr irgendeine Einstellung oder trick zur Verbesserung der Leistung von einem UICollectionView
hat, dass Zellen mit abgerundeten Ecken?
- Verwenden Sie vorab gerenderte Bilder statt für den gleichen Effekt-wenn möglich - corner-radius als auch die Schatten sind ziemlich teuer, wenn Sie fertig über diese layer-Eigenschaften.
- Auch die Zelle wiederverwenden hilft nicht, umsetzen Ecke Rundung iOS wurde neu berechnet, was beschnitten werden soll bei jedem frame, während die Zelle bewegen, wenn sich etwas ändert. Nicht so schlimm, wie Schatten, obwohl.
- Ich hatte gedacht, das auszuprobieren, aber ich habe versucht, es zu vermeiden, da meine Zellen haben variable text. Auch nicht die Eigenschaft shouldRasterize=JA, ein image zu erstellen, der die Schicht vor dem Rendern es?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als @Till angemerkt in den Kommentaren, eine vorab gerenderte Bild sollte sich eine Lösung für dein performance problem. Sie können all die Eck-Rundungen, Schatten und was auch immer andere Spezialeffekte, die in, dass, anstatt benötigen CA, dass Sie on-the-fly.
Vorab gerenderte Bilder nicht sperren Sie in einen statischen Inhalt Größe, entweder: Blick in die
UIImage
veränderbare Bild Zeug. (Das ist immer noch viel schneller als CA Rendern von jedem Bild.)Habe ich gefunden, dass dies verursacht völlig, weil der Aufruf dequeuereusablecellwithidentifier. Jedes mal, wenn diese aufgerufen wird, wird die Zelle mit abgerundeten Ecken muss neu dargestellt werden. Wenn Sie der Ansicht Sammlung nicht entfernen Sie Sie aus der Ansicht, wenn der Artikel aus dem Bildschirm gescrollt, dann die Leistung nicht beeinträchtigt würde (solange nicht zu viele Elemente in der Auflistung ist). Scheint wie ein zweischneidiges Schwert - beide Möglichkeiten haben Ihre Grenzen.
Gibt es einen code für UIView-Unterklasse, die Ihnen einen Blick deckend mit abgerundeten Ränder und der transparente Loch in der Mitte.
Sollten Sie der Ansicht benötigt als üblich, und danach können Sie die Ansicht mit dem Loch über Ihre Ansicht. Visualisierung ist hier.
Funktioniert es, wenn Sie einen farbigen hintergrund für die UICollectionView oder UITableView, können Sie fügen Sie folgenden Untersichten für jede Zelle:
Beispiel für eine target-Zelle-Klasse:
Ergebnis:
Tabelle mit gerundeten Ansichten als Zellen
Ich Feste alle meine Leistung borderRadius Probleme durch die Anwendung dieser radius auf der contentView statt der Zelle selbst.