2012-02-02 5 views
9

Próbuję zoptymalizować moją aplikację. Jest to dość bogaty wizualnie, więc ma sporo warstwowych UIViews z dużymi obrazami i mieszanie itpCzy powinienRasteryzować na rasteryzacji powodującej CALayer przed lub po transformacji warstwy?

Ja eksperymentowałem z właściwością shouldRasterize na CALayers. W jednym przypadku w szczególności mam UIView, który składa się z wielu widoków podrzędnych, w tym tabeli. W ramach przejścia, w którym cały ekran jest przewijany, ta wartość skaluje się i obraca (za pomocą transformacji).

Zawartość UIView pozostaje statyczna, więc pomyślałem, że sensowne byłoby ustawienie view.layer.shouldRasterize = YES. Jednak nie zauważyłem wzrostu wydajności. Czy to możliwe, że jest to ponowne rasteryzowanie każdej klatki w nowej skali i rotacji? Miałem nadzieję, że rasteryzuje na początku, kiedy ma macierz przekształceń tożsamości, a następnie buforuje to, gdy skaluje się i obraca podczas przejścia?

Jeśli nie, czy istnieje sposób, w jaki mógłbym to zmusić? Poza dodaniem nadmiarowego super widoku/warstwy, która nie robi nic poza skalowaniem i obracaniem zrasteryzowanej zawartości ...

Odpowiedz

8

Możesz odpowiedzieć na własne pytanie, profilując swoją aplikację za pomocą CoreAnimation instrument. Zauważ, że ten jest dostępny tylko w urządzeniu.

Możesz włączyć "Kolorowe trafienia w kolorze zielonym i czerwone szanse". Jeśli twoja warstwa pozostaje czerwona, oznacza to, że rasteryzuje ona każdą klatkę.

+0

Co spowodowałoby, że zmieni kolor na czerwony? Kończy się pamięć GPU? – jjxtra

+0

Albo to, albo warstwa została ponownie wyrenderowana, więc pamięć podręczna zostanie unieważniona. – NachoSoto

Powiązane problemy