Czy należy wywołać rysunek CAShapeLayers z drawRect()
lub layoutSubviews()
?Niestandardowy rysunek UIV z układem Odsłony kontra drawRect
Zgodnie z dokumentacją Apple na UIViews operacje rysowania powinny być umieszczone w drawRect()
.
Nie dotyczy to jednak sesji WWDC Kevina Catheya: What's New in Interface Builder (gdzie demonstruje proces budowania niestandardowego interfejsu UIView dostępnego w programie Interface Builder).
Podczas swojej demonstracji wykonuje rysunek widoku w postaci layoutSubviews
zamiast drawRect
.
Jego wyjaśnienie, że:
Gdybym zaimplementować drawRect, że nie będzie się nam najlepsze osiągi; mając na uwadze, że używanie podwarstw i subskrybentów zapewni nam naprawdę dobrą wydajność.
Z tego co dotychczas przeczytałem na temat StackOverflow, wydaje się, że przesłonięcie metody drawRect()
może spowodować obniżenie wydajności. Częściowo wynika to z tego, że setNeedsDisplay
powoduje, że ręczne odświeżanie jest kosztowne.
Ale przeglądając dokumenty Apple i aplikacje rzeczywistego świata. Ma to sens, że drawRect()
powinien być odpowiedzialny za rysowanie położenia i pozycjonowanie.