Ich möchte animieren, tatsächlich verblassen, "innerhalb" von drawRect

8

Gibt es eine Möglichkeit, drawRect zu animieren, VON DER VORHERIGEN SZENE zum nächsten zu machen?

(Erstaunlicherweise) Sie können innerhalb von drawRect animieren - probieren Sie es aus. Sie können jede andere Eigenschaft ausblenden, übersetzen oder animieren.

Es beginnt jedoch "from fresh", von blank. Wenn Sie beispielsweise einen fade-in-Animationsblock in drawRect einfügen, verschwindet die vorherige Szene mit und Die neue Szene wird von Weiß eingeblendet.

Ich möchte, dass der Bildschirm aus dem vorherigen Bild (gezeichnet im vorherigen Zyklus von drawRect) in das neue Bild, das ich gerade gezeichnet habe, verschwindet ... err, am Zeichnung.

Gibt es eine Möglichkeit, das zu tun, vielleicht tückisch, indem Sie manipulieren, was mit drawRect passiert?

Dies scheint ein sehr häufiger Anwendungsfall zu sein - Mischen von einer Szene zur nächsten .

Kennt jemand das Geheimnis?

Natürlich kann dies natürlich im Kernanimationsmilieu oder auf viele andere Arten geschehen, aber es ist naheliegend, drawRect von einem DrawRect zum nächsten zu verblassen. Prost.

Erstaunliche Aktualisierung dank des Genies von WrightCS .....

Danke nur an WrightCS, wir wissen jetzt, dass drawRect Animationen perfekt beherrscht. Fügen Sie diesen Code einfach am Ende eines beliebigen drawRect ein und versuchen Sie es:

%Vor%

Es behandelt den gesamten drawRect, egal wie komplex er ist, als einen riesigen Block und verpackt ihn in diese Animation. Ja, es enthält sogar in Offscreen-Bereichen, Bitmap-Rendering oder irgendetwas anderes gemalt. Alles wird animiert. Wer wusste das?

Das Problem in der Hand - wie man es die Animation von der vorherigen Szene beginnen lässt, anstatt von leer anzufangen?

    
Fattie 18.01.2011, 23:09
quelle

5 Antworten

4

Ein bisschen zu spät, aber ich suchte auch danach, und die akzeptierte Antwort auf Diese Frage funktioniert wie ein Zauberspruch direkt von innen drawRect .

    
Cyrille 25.05.2012, 09:24
quelle
4

Drawrect ist unsichtbar. Das passiert im "Backbuffer", den das iOS nur dann auf dem Bildschirm anzeigt, wenn du mit drawRect fertig bist. So können Sie in der Regel nicht animieren. Sie können jedoch Animationsanweisungen von fast überall eingeben, einschließlich von drawrect. Aber die Animation wird danach ausgeführt.

Animation erfordert Timing und zeigt dem Benutzer verschiedene Frames.

Sie können das alles alleine machen (ständig ein Neuzeichnen erzwingen und etwas anderes in der Zeichnung machen), aber das ist eine Menge Arbeit, besonders wenn Sie es richtig machen wollen.

Zum Glück hat iOS viele Animationseffekte für Sie programmiert. Entweder mit Core Animation oder der (einfacheren und einfachsten) Animation in UIKit. Da jedoch bestimmte Eigenschaften von Ansichten (z. B. das Alpha einer ganzen Ansicht oder die Drehung einer ganzen Ansicht) animiert werden, müssen Sie möglicherweise Ihre Ansichten und Unteransichten neu anordnen, um sie gut zu nutzen.

>

z. Jedes Pferd Glied ist separate Unteransicht und Sie animieren ihre Transformationen (kein Neuzeichnen benötigt, iOS wird den Rest tun)

z. Der alte und der neue Frame sind zwei separate Ansichten und Sie animieren den neuen Frame (der sich oben befindet) von Alpha 0 bis Alpha 1.

    
Kris Van Bael 18.01.2011 23:42
quelle
2

Sie können das Alpha animieren:

%Vor%     
WrightsCS 18.01.2011 23:11
quelle
1

Wenn Sie unter iOS 5.0 und höher sind, können Sie Folgendes verwenden:

%Vor%     
valvoline 15.02.2012 14:01
quelle
0

Das Beste, was Sie tun können, ist, zwei UIView Instanzen zu verwenden und zwischen ihnen zu animieren.

Wenn Sie die Animation starten, müssen Sie wissen, welcher der ursprüngliche und letzte Status der Animation ist. Das ist schwierig, wenn es nur eine Ansicht ist.

    
Sulthan 15.02.2012 14:22
quelle