UIView sofort neu zeichnen lassen und nicht mit setNeedsDisplay?

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • bachelor schrieb:

    […]
    Für setNeedsDisplay gibt es unter .Net das Invalidate() was auch gut und sinnvoll ist. Aber wenn man das Refresh() benötigt, dann steht es einem halt zur Verfügung und ist auch in sehr vielen Fällen sinnvoll.

    Bitte erläutere mir die Fälle und versuche dafür eine allgemeine Regel aufzustellen. Mir fällt das nämlich nicht ein.

    Wie dem auch sei: In deinem Falle ist es ganz gewiss nicht sinnvoll.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • bachelor schrieb:

    ich möchte nur etwas für 200ms während einer Abarbeitung einer Methode blinken lassen.

    Dafür solltest Du Dir mal Core Animation anschauen.

    bachelor schrieb:

    Dafür brauche ich keine OO. Der rest im Programm ist sehr wohl OO.

    Ich wusste gar nicht, dass mensch das an- und abschalten kann. Wo ist denn dafür der Schalter (nur so interessehalber)? ;) :D

    bachelor schrieb:

    Nur für das Blinken extra Konstrukte auszudenken. Na ja.

    Wie geschrieben: Core Animation
    „Meine Komplikation hatte eine Komplikation.“
  • Amin Negm-Awad schrieb:

    longW schrieb:

    Interessant ist, dass es nicht wirklich mit oo zu tun hat, sondern eher mit Cocoa und Runtime und was alles noch da ist.
    Beispielsweise ein ARP.

    Ich greife mal Michaels Formulierung auf:
    Wenn er das System lahm legt, muss er sich nicht wundern, wenn er es lahm gelegt hat.

    Doch, es hat schon etwas mit OO zu tun, weil die Aktion des Programmes (zeichnen) auf einer Nachricht basiert. Das ist umgekehrt unabhängig von Cocoa und RTE (mit dem es wirklich gar nichts zu tun hat.)


    Damit hast Du natürlich Recht.

    Meine Bemerkung bezog sich weniger auf das Zeichnen, sondern mehr auf das lahm legen mit sleep().
    Eigentlich sollte Apple für diese Funktion das "brokenDisplay" anzeigen.
    I would be embarrassed if they did not spy on me.
  • bachelor schrieb:

    jeder weiß natürlich besser was in meinem Fall das Richtige ist. Die hellseherische Fähigkeiten mancher user überaschen mich immer wieder. :thumbsup:

    Du hast beschrieben, was du wolltest.

    Davon abgesehen schienst du hellseherische Fähigkeiten zu haben, wenn du Dinge beurteilst, die du überhaupt nicht kennst.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • Das Sperren der Anwendung für 200ms ist von mir ausdrücklich gewollt. Doch zuvor soll es symbolisiert werden. Wenn es innerhalb einer Methode unter Cocoa nicht geht, dann werde ich auf andere Mechanismen zurück greifen. Gefallen tut es mir trotz dem nicht.

    Das Thema ist vorerst erledigt. Danke.
  • bachelor schrieb:

    jeder weiß natürlich besser was in meinem Fall das Richtige ist. Die hellseherische Fähigkeiten mancher user überaschen mich immer wieder.

    Mal ehrlich: Du hast ein bestimmtes Ziel und Dich bei der Konzeption in eine Sackgasse verrannt. Nun versuchst Du mit allen Mitteln, die Umgebung so zurecht zu biegen, dass es doch irgendwie geht, obwohl Dir Andere den Tipp (das ist keine Anweisung und im Übrigen freiwillig) geben, mal etwas Anderes auszuprobieren. Was ist denn so schlimm daran? Wozu über Cocoa lamentieren, Du kannst es doch eh nicht ändern? Warum krampfhaft an Deiner Idee festhalten, wenn es doch leichtere und schlankere Wege gibt? Du verschwendest Deine Energie mit Diskutieren, anstelle mal die Doku zu CoreAnimation zu lesen und dort Deine Energie einzusetzen.
  • bachelor schrieb:

    jeder weiß natürlich besser was in meinem Fall das Richtige ist. Die hellseherische Fähigkeiten mancher user überaschen mich immer wieder. :thumbsup:


    Wenn Du das witzig findest, dann schau mal, wie es Kassandra ergangen ist.
    Seit Deinem ersten Beitrag ist mir klar, auf welchem Holzweg Du Dich befindest.
    Verlasse ihn nicht! Bitte!

    Und wenn Dir sleep() nicht reicht, schalte den Strom ab. Wo der Schalter liegt, weisst Du ja schon den Handbüchern von MS.
    I would be embarrassed if they did not spy on me.
  • Wieso erinnert mich das an das alte Konstrukt
    'Ich will eine Berechnung in einen Thread auslagern, damit das UI nicht blockiert. Jetzt kann der User weiterhin Eingaben machen. Was kann ich dagegen tun?',
    natürlich ganz harmlos formuliert als
    'Wie kann ich herausfinden, ob eine Methode in einem Thread beendet wurde?'

    "Blinken" bezeichnet den Wechsel von einer Farbe zur Anderen. Eine weitere Form des Blinkens ist beispielsweise das so genannte "Pulsieren", bei dem die Zeitabstände nicht in fixen Bereichen liegen sondern variieren können.
    Wenn das keine Animation ist, was ist es dann?
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • CoreAnimation ist in diesem speziellen Fall alles andere als richtig!!! Den ich möchte das Programm für eine gewisse Zeit stoppen und nicht parallel zu der Abarbeitung etwas animieren.

    Bitte nur auf meine Frage aus dem ersten Post antworten und nicht Ratschläge verteilen die für diesen Fall unbrauchbar sind. Ich möchte eine UIView SOFORT Aktualisieren bevor mit der Abarbeitung des Programms (der Methode) weiter gemacht wird.
  • bachelor schrieb:

    CoreAnimation ist in diesem speziellen Fall alles andere als richtig!

    Das glaube ich nach wie vor nicht.

    bachelor schrieb:

    Den ich möchte das Programm für eine gewisse Zeit stoppen und nicht parallel zu der Abarbeitung etwas animieren.

    Vielleicht ist ja etwas an Deinem Ansatz falsch. Entschuldigung, wenn ich schon wieder raten muss (Woran könnte DAS blos liegen?): Du willst sicherlich nicht das Programm stoppen, sondern für eine begrenzte Zeit keine Eingabe zulassen, oder?

    bachelor schrieb:

    Bitte nur auf meine Frage aus dem ersten Post antworten und nicht Ratschläge verteilen die für diesen Fall unbrauchbar sind.

    Das ist eine Einstellung, die ich besonders mag.

    Wenn meine Vermutung stimmt, gibt es eine relativ einfache Lösung MIT Core Animation. Aber wie Fermat schon schrieb: Leider ist der Rand zu klein...
    „Meine Komplikation hatte eine Komplikation.“
  • C-Quellcode

    1. -(void)machDunkel
    2. {
    3. //drawing code
    4. [view setNeedsDisplay:YES];
    5. }
    6. -(void)machNix
    7. {
    8. sleep(200);
    9. }
    10. -(void)machNeu
    11. {
    12. //drawing code
    13. [view setNeedsDisplay:YES];
    14. }
    15. - (IBAction)machQuatsch
    16. {
    17. [self machDunkel];
    18. [self machNix];
    19. [self machNeu];
    20. }
    Alles anzeigen


    C-Quellcode

    1. [theView display];
    2. //NSView only


    C-Quellcode

    1. // Eigene Subklasse deines Views
    2. - (void)setDark;
    3. - (void)setDark
    4. {
    5. // draw it like it's hot
    6. [self setNeedsDisplay:YES];
    7. }
    8. // Implementierung im App-Controller
    9. - (IBAction)doSomething
    10. {
    11. [theView setDark];
    12. sleep(200);
    13. //drawing code
    14. [theView setNeedsDisplay:YES];
    15. }
    Alles anzeigen


    Langsam müsstest auch du verstanden haben, dass setNeedsDisplay erst nach Verlassen der Methode durchgeführt wird.
    Offenkundig scheinst du das aber zu ignorieren.

    Und, die einfachste Lösung überhaupt:

    C-Quellcode

    1. [theView drawRect:[theView bounds]];


    Bevor du wieder auf deinen ersten Beitrag hinweist:
    Zum Einen hast du nen Typo drin ( [MyView drawRect:[myView bounds]]; ), zum Anderen die Doku nicht gelesen oder nicht verstanden.
    Deshalb noch mal der für dich relevante Teil: (Lesen und verstehen darfst du gern selbst.)

    Dokumentation sowohl zu NSView als auch zu UIView beim Punkt -drawRect:
    Subclasses override this method if they actually draw their views. Subclasses need not override this method if the subclass is a container for other views.
    The default implementation does nothing.


    Dann bis zur nächsten Frage. :rolleyes:
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • bachelor schrieb:

    :thumbdown: Ich weiß was CoreAnimation ist und ich kann es hier nicht gebrauchen! Wie oft denn noch??? Das wird mir echt zu doof.

    Ich bezweifle nicht, dass du das weißt.
    Ich bezweifle nicht, dass du es für den von dir erdachten Weg nicht gebrauchen kannst.

    Ich bezweifle stark, dass du verstehst, dass auch wir der Meinung sind, dass es für den von dir erdachten Weg nicht brauchbar ist.
    Denn du verstehst nicht, dass wir die Sinnhaftigkeit des von dir erdachten Weges anzweifeln.

    Mir ist es auch zu blöd. Deshalb siehe vorherige Antwort.
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • Lucas de Vil schrieb:

    C-Quellcode

    1. -(void)machDunkel
    2. {
    3. //drawing code
    4. [view setNeedsDisplay:YES];
    5. }
    6. -(void)machNix
    7. {
    8. sleep(200);
    9. }
    10. -(void)machNeu
    11. {
    12. //drawing code
    13. [view setNeedsDisplay:YES];
    14. }
    15. - (IBAction)machQuatsch
    16. {
    17. [self machDunkel];
    18. [self machNix];
    19. [self machNeu];
    20. }
    Alles anzeigen


    C-Quellcode

    1. [theView display];
    2. //NSView only


    C-Quellcode

    1. // Eigene Subklasse deines Views
    2. - (void)setDark;
    3. - (void)setDark
    4. {
    5. // draw it like it's hot
    6. [self setNeedsDisplay:YES];
    7. }
    8. // Implementierung im App-Controller
    9. - (IBAction)doSomething
    10. {
    11. [theView setDark];
    12. sleep(200);
    13. //drawing code
    14. [theView setNeedsDisplay:YES];
    15. }
    Alles anzeigen


    Langsam müsstest auch du verstanden haben, dass setNeedsDisplay erst nach Verlassen der Methode durchgeführt wird.
    Offenkundig scheinst du das aber zu ignorieren.

    Und, die einfachste Lösung überhaupt:

    C-Quellcode

    1. [theView drawRect:[theView bounds]];


    Bevor du wieder auf deinen ersten Beitrag hinweist:
    Zum Einen hast du nen Typo drin ( [MyView drawRect:[myView bounds]]; ), zum Anderen die Doku nicht gelesen oder nicht verstanden.
    Deshalb noch mal der für dich relevante Teil: (Lesen und verstehen darfst du gern selbst.)

    Dokumentation sowohl zu NSView als auch zu UIView beim Punkt -drawRect:
    Subclasses override this method if they actually draw their views. Subclasses need not override this method if the subclass is a container for other views.
    The default implementation does nothing.


    Dann bis zur nächsten Frage. :rolleyes:

    Soviele Zeichen und NULL Funktion!
  • bachelor schrieb:

    @Lucas de Vil: du kannst oder willst nicht verstehen was ich machen möchte. Bitte den ersten Post nochmal lesen...

    Nöoh, der versteht das, sehr gut sogar.

    Du meinst, weil das Display verdunkelt werden soll, du das Licht ausschalten muss.
    Gerne, aber frage dann nicht nach, was der Rechner machen soll.
    Meinst Du, die Taschenlampenprogramme funktionieren so?

    Also Timer, oder noch besser Animation.
    I would be embarrassed if they did not spy on me.
  • ich habe bereits gestern einen Timer dafür eingesetzt. Ich würde in .Net das für eine sehr schlechte Lösung halten, da die sichtbaren Objekte auch wirklich SOFORT ohne irgendwelche Timer sich aktualesieren lassen.