2012-09-25 10 views
5

W kakao, gdy chcemy przerysować widok, wyślemy wiadomość o treści: setNeedsDisplay:, informująca widok, aby przerysował się za pomocą parametru TAK. Zastanawiam się, czy są jakieś okoliczności, w których chciałbyś wysłać widok setNeedsDisplay:NO, taki jak środowiska wielowątkowe, a jeśli wysyłając widok setNeedsDisplay:YES, ustawienie go ponownie zaraz po setNeedsDisplay:NO spowoduje odświeżenie widoku. Jeśli nie ma powodu, aby zadzwonić pod numer setNeedsDisplay:NO, to po co tworzyć taką żmudną metodę, w której można zaimplementować coś w stylu: [view redrawView]Czy setNeedsDisplay: NO w ogóle nie ma zastosowania?

Odpowiedz

1

setNeedsDisplay:NO może być użyty w przypadku, gdy użytkownik chce odrzucić poprzednio o nazwie setNeedsDisplay:YES. Na przykład. czasami łatwiej jest oznaczyć wszystkie subviews jako wymagające wyświetlania, a następnie uruchomić algorytm, aby usunąć niektóre z nich.

-2

Jak być może wiesz, aktualizacja ekranu jest automatyczna (jeśli to konieczne) przy każdym przejściu przez normalne zdarzenie pętla. Zadzwoń pod numer setNeedsDisplay:, aby wymusić aktualizację wyświetlacza, jeśli zajdzie taka potrzeba.

Z dokumentacji NSView:

Dyskusja
Ilekroć dane lub stan używane do rysowania obiekcie View zmian, widok powinien być wysłany do setNeedsDisplay: wiadomość. Obiekty NSView oznaczone jako wymagające wyświetlania są automatycznie ponownie wyświetlane przy każdym przejściu przez pętlę zdarzeń aplikacji. (Zobacz obiekty, które wymagają, aby ponownie wyświetlić zanim pętla zdarzenie przychodzi może oczywiście zostać natychmiast wysłany odpowiedni wyświetlacz ... metody.)

Wartość logiczna parametr tej funkcji określa, czy po prostu całe granice z dotyczy to danego widoku, a nie, jeśli właściwość "needsDisplay" ma wartość true lub false. Tak więc, setNeedsDisplay: rzeczywiście działa tak jak "redrawView", tylko z dodatkowym parametrem.

Edit

Powyższy była inspirowana z tej samej dokumentacji:

flagi
Jeśli TAK, oznacza odbiornika całych granic jako wymagające wyświetlacz; jeśli NIE, oznacza to, że nie wymaga wyświetlania.

+3

Jest to w dużej mierze niepoprawne. Pętla zdarzeń sprawdza, czy widok musi zostać przerysowany, jak określono przez 'setNeedsDisplay:' po wywołaniu (faktycznie ustawia flagę: '- [NSView needsDisplay]'). Ta metoda absolutnie nie powoduje natychmiastowego przerysowywania, ani też, że każdy widok nie musi być przerysowywany przy każdym przejściu. Wymuszone działanie rysowania wymuszane jest przez '- [wyświetlacz NSView]' oraz '- [NSView displayRect:]'. Zobacz http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CocoaViewsGuide/Optimizing/Optimizing.html#//apple_ref/doc/uid/TP40002978-CH11-112409 –

+0

Wystarczająco sprawiedliwe. Poprawiłem moją odpowiedź i wyjaśniłem skąd pochodzą informacje. – Mundi

+1

@Mundi Niestety to nie odpowiada dokładnie na moje pytanie. Pytam, czy istnieją jakiekolwiek użycie dla 'setNeedsDisplay: NO'. – TheAmateurProgrammer

Powiązane problemy