• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

NSView Inhalt zwischenspeichern oder Bitmap

karolherbst

Danziger Kant
Registriert
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
 

karolherbst

Danziger Kant
Registriert
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...
 

karolherbst

Danziger Kant
Registriert
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.
 

sumpfmonsterjunior

Morgenduft
Registriert
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
 

karolherbst

Danziger Kant
Registriert
11.05.07
Beiträge
3.878
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.

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.
 

MacApple

Schöner von Bath
Registriert
05.01.04
Beiträge
3.652
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.
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? ;)

Und nochmal Danke an MacApple hat mir sehr geholfen.
Keine Ursache.

MacApple