Co uruchamia offscreen rendering, blending i layoutSubviews w iOS?

Excactly na co powinienem zwracać uwagę?

Chcę listę z jak największą liczbą przykładów. Lub listę najlepszych praktyk.

Author: hfossli, 2012-10-31

1 answers

Offscreen rendering / Rendering na CPU

[51]}największe wąskie gardła w wydajności grafiki to renderowanie poza ekranem i mieszanie-mogą występować dla każdej klatki animacji i mogą powodować wahania przewijania.

Renderowanie Offscreen (renderowanie oprogramowania) ma miejsce, gdy konieczne jest wykonanie rysowania w oprogramowaniu (offscreen) przed przekazaniem go do GPU. Sprzęt nie obsługuje renderowania tekstu i zaawansowanych kompozycji z maskami i cienie.

Poniższe wywołają renderowanie poza ekranem:

  • Każda warstwa z maską (layer.mask)

  • Dowolna warstwa z layer.masksToBounds / view.clipsToBounds być prawdziwym

  • Każda warstwa z layer.allowsGroupOpacity ustawioną na YES I layer.opacity jest mniejsza niż 1.0
    kiedy widok (lub warstwa) wymaga renderowania poza ekranem?

  • Każda warstwa z cieniem (layer.shadow*).
    Porady jak naprawić: https://markpospesel.wordpress.com/tag/performance/

  • Każda warstwa z {[6] } Jest Prawdziwa

  • Dowolna warstwa z layer.cornerRadius, layer.edgeAntialiasingMask, layer.allowsEdgeAntialiasing

  • Jakąkolwiek warstwę z layer.borderWith i layer.borderColor?
    Brak odniesienia / dowodu

  • Tekst (dowolny rodzaj, w tym UILabel, CATextLayer, Core Text, itp.).

  • Większość rysunku wykonujesz CGContext W drawRect:. Nawet pusta implementacja będzie renderowana poza ekranem.


Mieszanie


Układ

The po uruchomieniu UIView zostanie wywołane następujące rzeczy: layoutSubviews:

  • Zmiana bounds wyzwalaczy w tym samym widoku i superview

  • Zmiana frame wyzwalaczy w tym samym widoku i superview

  • Zmiana transform lub layer.transform wyzwalaczy na superview

Uwaga: mam na myśli rzeczywiste zmiany, gdzie wartości faktycznie się zmieniają

Sprzeczne te zmiany nie wywołują layoutSubviews, aby: center, layer.position, layer.zPosition, layer.anchorPoint, layer.anchorPointZ.

Numer referencyjny: https://github.com/hfossli/LayoutSubviewsInconsistency


Ogólne wskazówki dotyczące poprawy wydajności

  • Często lepiej jest blend niż render offscreen.

  • Rozważ użycie drawRect: zamiast widoku z wieloma etykietami i podglądami.

  • Rysowanie w kolejce tła do UIImage lub CGImageRef.

  • Draw to a CGLayer (który jest buforowany lepiej na GPU w porównaniu do UIImage) i wciągnij w to, co chcesz.
    Update, don ' t: http://iosptl.com/posts/cglayer-no-longer-recommended/

  • Spłaszczyć swoją hierarchię

  • Ponowne użycie widoków – nie twórz i nie dodawaj nowych podczas przewijania

  • Mieć opaque widoki z jednolitym kolorem tła

  • Unikaj ustawienia alpha i layer.opacity na mniej niż 1,0

  • WŁĄCZ layer.shouldRasterize (używaj ostrożnie). Lubię tego unikać. osobiście, ale w niektórych przypadkach działa szybciej, ponieważ rastry warstwy będą buforowane i ponownie używane. Pamiętaj, jeśli włączysz shouldRasterize na warstwach, które często zmieniają zawartość lub zawartość podwarstw spowoduje spadek wydajności, ponieważ system iOS będzie rasteryzował warstwę na każdej z nich zmiana.


Linki

 39
Author: hfossli,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:10:36