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
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.
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.
- 1. SetNeedsDisplay nie działa
- 2. setNeedsDisplay nie wypalanie DrawRect
- 3. setNeedsDisplay nie działa?
- 4. Parametr phpunit memory_limit nie ma zastosowania
- 5. Niestandardowe UITableViewCell nie będzie odrysowywać na setNeedsDisplay
- 6. UILocalNotification w ogóle nie działa
- 7. MessageBox.Show nie działa w ogóle
- 8. edycji git poprawka daje „Twój edytowany przystojniak nie ma zastosowania”
- 9. Q_DECLARE_METATYPE nie działa w ogóle
- 10. Rozmiar i typ czcionki nie ma zastosowania z CATextLayer
- 11. Czy - [NSObject autoContentAccessingProxy] działa w ogóle?
- 12. logowanie python nie działa w ogóle
- 13. Git ma --no-prefix jako domyślny?
- 14. Czy w ogóle jest wywołana funkcja OnItemSelectedListener.onNothingSelected?
- 15. Czy wiosna naprawdę nie wspiera w ogóle iniekcji interfejsu?
- 16. Ma domyślny konstruktor funkcji boost :: no-throw?
- 17. Xcode 7.3 intellisense nie działa w ogóle
- 18. Czy mogę przestać używać "inline" w ogóle?
- 19. setNeedsDisplay nie wyzwala drawRect w subviews zgodnie z oczekiwaniami
- 20. Datepicker bazy danych nie działa w ogóle
- 21. Wydruki CSS @media w ogóle nie działają
- 22. Bootstrap modalne nie działa w ogóle
- 23. Topbar Zurb Foundation nie działa w ogóle
- 24. Dlaczego "long int" ma taki sam rozmiar jak "int"? Czy ten modyfikator działa w ogóle?
- 25. Wywołanie setNeedsDisplay: TAK na warstwie hosting pogląd nie przerysować widok
- 26. Makro zastosowania powtarzajacego w Clojure
- 27. Czy .Net IL zmieniło się w ogóle od .Net 2.0?
- 28. No toFloat w Haskell
- 29. Czy MySQL może zrównoleglić podzapytania UNION (lub cokolwiek w ogóle)?
- 30. Czy Instagram ma przycisk udostępniania, czy nie?
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 –
Wystarczająco sprawiedliwe. Poprawiłem moją odpowiedź i wyjaśniłem skąd pochodzą informacje. – Mundi
@Mundi Niestety to nie odpowiada dokładnie na moje pytanie. Pytam, czy istnieją jakiekolwiek użycie dla 'setNeedsDisplay: NO'. – TheAmateurProgrammer