2010-07-02 19 views
6

Zauważyłem, że niektóre rzeczy, które robię z obrazami w mojej aplikacji, mogą być wykonywane z właściwościami CALayer (np. Granice, cienie, gradienty itd.). Zastanawiam się więc, czy na ogół lepszym pomysłem jest używanie CALayerów i innych, lub po prostu robić to wszystko w Photoshopie i używać UIImage (View) do czegokolwiek, czego potrzebuję? Wydajność przewijania była trochę powolna z cieniami i innymi rzeczami, więc staram się znaleźć każdą małą optymalizację, jaką mogę.CALayer performance vs. UIImageView performance

Informacje podstawowe: Zasadniczo przewijam tylko kilka obrazów w pionie. Nieco jak aplikacja do zdjęć. Wszystko to począwszy od wersji 3.2, więc mam dostęp do rzeczy takich jak cień i powinienRasterize właściwości w CALayer.

Odpowiedz

15

Kluczową rzeczą, jaką należy wiedzieć o CALayer Shadows, jest to, że domyślnie są renderowane ze złożonego kanału alfa; może to być naprawdę powolne, szczególnie gdy warstwa obraca się lub zmienia rozmiar. Powinieneś zajrzeć do właściwości shadowPath: jeśli podasz Core Animation prosty kształt, taki jak prostokąt (UIBezierPath+bezierPathWithRect: z warstwą bounds da ci [przez jego własność CGPath] CGPathRef możesz tam użyć), zobaczysz wiele lepsza wydajność. Niezwykle przydatna jest również funkcja:

shouldRasterize, zwłaszcza w przypadku widoków, które mają wiele subskrybowanych, które nie zmieniają się często; upewnij się jednak, że ustawiłeś warstwę rasterizationScale na [UIScreen mainScreen].scale, inaczej uzyskasz nieprzyjemną pikselację na ekranach o wysokiej rozdzielczości, takich jak iPhone 4.