Mam widoku warstwy hosting skonfigurować tak jak to w zwyczaju NSView
podklasy:Wywołanie setNeedsDisplay: TAK na warstwie hosting pogląd nie przerysować widok
[self setLayer:rootLayer];
[self setWantsLayer:YES];
I dodać wszystkie podwarstwy do drzewa warstwy po wywołaniu setNeedsDisplay
na każdej podwarstwie. Zawartość każdej warstwy zapewnia metoda delegata mojej warstwy.
Oto mój problem:
Po zainicjowaniu moim zdaniem widok dostaje narysować prawidłowo. Jednak po zmianie modelu i wywołaniu [myCustomView setNeedsDisplay:YES];
z kontrolera widoku, nie jest wywoływana drawLayer:inContext
.
Jestem zdezorientowany teraz jak zaktualizować widok:
- muszę wywołać metodę
setNeedsDisplay
na każdym CALayer w drzewie warstw? - Czy wywołanie
setNeedsDisplay:YES
na samym widoku hosta warstw nie może spowodować odrysowania drzewa całej warstwy?
Dzięki za pomoc.
Edit
Znalazłem coś w klasie NSView odwoływać
Widok warstwy wspierany jest pogląd, że jest wspierany przez warstwę Core Animation. Wszelkie rysunki wykonane przez widok są buforowane w warstwie podkładu. Skonfigurowałeś widok warstwowy, po prostu wywołując metodę setWantsLayer: z wartością YES. Klasa widoku automatycznie utworzy warstwę pomocniczą dla ciebie i użyjesz mechanizmów rysowania klasy widoku. Podczas korzystania z widoków z warstwami nigdy nie należy bezpośrednio wchodzić w interakcję z warstwą.
Widok hostingu warstw jest widokiem zawierającym warstwę Core Animation, którą użytkownik chce bezpośrednio manipulować. Tworzysz widok hostingu warstw, tworząc instancję klasy warstwy Core Animation i ustawiając ją przy użyciu metody setLayer: view. Po wykonaniu tej czynności należy wywołać metodę setWantsLayer: z wartością YES. Podczas korzystania z widoku hostingu warstw nie należy polegać na widoku do rysowania ani dodawać subviews do widoku hostingu warstw.
W moim przypadku mam widok warstwy-gospodarzem. Czy to rzeczywiście oznacza, że muszę ręcznie uruchomić odświeżanie? Czy powinienem wdrożyć metodę pseudo drawRect w niestandardowym programie NSView, aby wywołać odpowiedni setNeedsDisplay na zmienionych CALayers?
Twój link do przykładowego kodu jest uszkodzony, być może jest to zamiennik: https://developer.apple.com/library/mac/samplecode/CoreAnimationKioskStyleMenu/Introduction/Intro.html#//apple_ref/doc/uid/ DTS40009512 –