Jakie są różnice między UIView a CALayer?

103

Oba mają większość tych samych atrybutów, obie obsługują różne rodzaje animacji, obie reprezentują różne dane. Jakie są różnice między UIView a CALayer?

Oleg Danu
źródło

Odpowiedzi:

224

W systemie iOS każdy UIView jest obsługiwany przez Core Animation CALayer, więc podczas korzystania z UIView masz do czynienia z CALayers, nawet jeśli możesz nie zdawać sobie z tego sprawy. W przeciwieństwie do NSViews na Macu, które ewoluowało przed powstaniem Core Animation, UIViews ma być lekkim opakowaniem dla tych CALayers.

Jak opisuję w podobnym pytaniu „Kiedy używać CALayer na Macu / iPhonie?” , praca bezpośrednio z CALayers nie daje znaczącej przewagi wydajności w porównaniu z UIViews. Jednym z powodów, dla których warto zbudować element interfejsu użytkownika z CALayers zamiast UIViews, jest to, że można go bardzo łatwo przenieść na komputer Mac. UIViews bardzo różnią się od NSViews, ale CALayers są prawie identyczne na obu platformach. Dlatego framework Core Plot przedstawia swoje wykresy przy użyciu CALayers zamiast innych elementów interfejsu użytkownika.

Jedną rzeczą, którą zapewnia UIViews na CALayers, jest wbudowana obsługa interakcji użytkownika. Zajmują się testowaniem trafień dotyku i innymi powiązanymi działaniami, które musisz sam zbudować, zarządzając hierarchią CALayers. Samo wdrożenie tego nie jest trudne, ale jest to dodatkowy kod, który musiałbyś napisać podczas budowania interfejsu tylko dla CALayer.

Często będziesz musiał uzyskać dostęp do warstw bazowych dla UIView podczas wykonywania bardziej złożonych animacji niż pozwala na to podstawowa klasa UIView. Możliwości animacji UIView wzrosły wraz z dojrzewaniem SDK systemu iOS, ale nadal jest kilka rzeczy, które najlepiej zrobić, wchodząc w interakcję z bazową wersją CALayer.

Brad Larson
źródło
40

Z bloga Ray Wenderlich ( samouczek )

CALayers to po prostu klasy reprezentujące prostokąt na ekranie z treścią wizualną. „Ale poczekaj cholerną minutę”, możesz powiedzieć, „po to są UIViews!” To prawda, ale jest w tym pewien podstęp: każdy UIView zawiera warstwę główną, do której przyciąga!

Mata
źródło
33

Mówiąc najprościej, UIView dziedziczy po UIResponder, obsługuje zdarzenia od użytkowników, zawiera CALayer, który dziedziczy po NSObject, głównie skupia się na renderowaniu, animacji itp.

Forrest
źródło
7

UIViewjest pojemnikiem na CALayers. Korzystanie UIKit.

CALayergdzie narysujemy zawartość. Za pomocąCoreGraphics

Jeśli pracujesz z niestandardowymi funkcjami takimi jak elementy sterujące, wspaniale byłoby skorzystać z pojedynczego widoku zawierającego więcej warstw w celu dokładnego renderowania natywnego. Ponieważ CALayerssą nieważkie niż UIView.

Aby utworzyć wspólny szkielet dla komputerów Mac i iOS, postępuj zgodnie z projektem aplikacji przy użyciu CALayers. Ponieważ jest dostępny na obu platformach.

UIViewposiadanie funkcji, takich jak zdarzenia dotykowe osiągane za pomocą delegatów -(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event, tochesStarttakich jak wydarzenia i inne UIKitfunkcje.

Do pracy z CALayerspodstawową wiedzą graficzną, do prostego renderowania widoku UIViewwystarczy.

Gobi M
źródło
0

Duża różnica polega na tym, że UIView jest przeznaczony dla CocoaTouch na urządzeniu mobilnym. Dodaje procedurę obsługi zdarzeń, której CALayer nie dostarczył.

musixlemon
źródło
0

UIView: widoki mają bardziej złożone układy hierarchii. Mogą odbierać interakcje użytkownika, takie jak stuknięcia, szczypanie, kliknięcia i inne. Praca z UIViews odbywa się w głównym wątku, co oznacza, że ​​wykorzystuje moc procesora.

CALayer: Z drugiej strony warstwy mają prostszą hierarchię. Oznacza to, że są szybsze w rozwiązywaniu i szybszym rysowaniu na ekranie. W przeciwieństwie do widoków nie ma narzutu łańcucha odpowiedzi. Warstwy są rysowane bezpośrednio na GPU. Dzieje się to w osobnym wątku bez obciążania procesora.

Więcej informacji: https://medium.com/@fassko/uiview-vs-calayer-b55d932ff1f5

Anit Kumar
źródło