1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

NSView Inhalt zwischenspeichern oder Bitmap

Dieses Thema im Forum "OS X-Developer" wurde erstellt von karolherbst, 12.01.10.

  1. karolherbst

    karolherbst Danziger Kant

    Dabei seit:
    11.05.07
    Beiträge:
    3.878
    Gibt es eine Möglichkeit, den redraw einer NSView zu umgehen, wenn man nur ihre Position in einer übergeordneten NSView verändert?

    Hier ist der Code, wo ich die Position der View verändere.
    Code:
    NSPoint point={x,y};
    [mySubView setFrameOrigin:point];
    Gibt es eventuell eine elegantere Möglichkeit? Ist schon irgendwie wichtig, da in meinem Programm auf die Dauer sich sehr viele SubViews ansammeln und die auch ständig in Bewegung sind und ich finde es ziemlich unnötig, wenn pro Sekunde an die 200 bis 300 Redraws erfolgen (alles in der Haupt NSView zu zeichnen finde ich auch Quatsch, weil ich ja die Idee hatte, dass möglichst wenig nachgezeichnet (oder berechnet) wird, da sich ja die einzelnen Bilder nicht verändern).
    Kann ich aber auch nicht einfach den Inhalt einer NSView in einer NSImageRep abspeichern oder direkt in einer NSImageRep malen? Weil dann würde ich die Bitmaps einfach in die Haupt NSView hin und herschieben.

    Danke schonmal im Vorraus
     
  2. MacApple

    MacApple Lord Grosvenor

    Dabei seit:
    05.01.04
    Beiträge:
    3.470
    Klingt danach, als wäre das ein Fall für Core Animation.

    MacApple
     
    karolherbst gefällt das.
  3. karolherbst

    karolherbst Danziger Kant

    Dabei seit:
    11.05.07
    Beiträge:
    3.878
    joa, das wäre dann der Schritt, den ich danach machen würde. Will aber erstmal so mit dem Umgang verschiedener Views etwas lernen. Bin aber davor erstmal auf den Gedanken gekommen, dass über OpenGL zu machen, was ja auch nicht so weit von Core Animation entfernt ist...
     
  4. karolherbst

    karolherbst Danziger Kant

    Dabei seit:
    11.05.07
    Beiträge:
    3.878
    mhh klappt mit CA super. Habe jetzt nur noch immer dann ein Redraw, wenn ein neues Object hinzukommt :D Aber jetzt ist ein anderes Problem. Wie kann ich nachdem eine Animation erfolgt ist, eine weitere Animation starten? Habe das jetzt mit einem NSTimer, der genau nach der Animationsdauer, die nächste Animation startet. Leider spielen sich da zum Teil verrückte Sachen aufm Bildschirm ab :D Gibt es da irgendwie eine Methode doAfterAnimation: oder sowas? Finde das mit dem NSTimer eher unschön.
     
  5. MacApple

    MacApple Lord Grosvenor

    Dabei seit:
    05.01.04
    Beiträge:
    3.470
    Die Klasse CAAnimation hat eine Delegate-Methode animationDidStop:finished:

    MacApple
     
  6. sumpfmonsterjunior

    sumpfmonsterjunior Morgenduft

    Dabei seit:
    17.03.05
    Beiträge:
    167
    Noch kurz ein paar Anmerkungen zu Deinem ursprünglichem Ansatz:

    Wenn Du so viele Objekte in Deiner "Hauptview" hast, bietet es sich an, einfach die Bilder oder die Infos mittels Quartz, der Cocoa-Zeichenfunktionen (NSBezierpath, NSImage etc.) oder einer NSCell Subklasse selber zu zeichen, das ist viel effizienter.

    Aber CA ist da sicher die Zukunft und liefert Dir die ganze Animationsinfrastruktur quasi frei haus mit.

    Gruß, SumpfMonsterJunior
     
  7. karolherbst

    karolherbst Danziger Kant

    Dabei seit:
    11.05.07
    Beiträge:
    3.878
    genau das habe ich getan... und genau weil beim Verschieben der SubViews diese sich immer Redraws gemacht haben, fand ich das sehr unsinnig. Bei ca 60 Objekten und dann noch in Echtzeit, also das es nicht "ruckelt". Das ist wohl nur mit CA wirklich möglich.

    Und nochmal Danke an MacApple hat mir sehr geholfen.
     
  8. MacApple

    MacApple Lord Grosvenor

    Dabei seit:
    05.01.04
    Beiträge:
    3.470
    Core Animation macht ja genau das, wonach Du gefragt hast. Die Views werden einmal gezeichnet und dann werden nur noch die „Bilder“ der Views auf den Bildschirm gebracht. Du kannst natürlich das alles nachprogrammieren, aber wozu? ;)

    Keine Ursache.

    MacApple
     

Diese Seite empfehlen