2 Stimmen

UIView animateWithDuration gibt sofort zurück

Ich versuche, ein in eine UIView eingebettetes Etikett zu animieren.

Dies ist der Code:

-(void)displayText:(NSString*)text {

[label setText:text];

[UIView animateWithDuration:5.0
                      delay:0.0
                    options:UIViewAnimationOptionCurveEaseIn
                 animations:^{
                     [labelView setAlpha:1.0];
                 }
                 completion:nil
 ];

[UIView animateWithDuration:5.8
                      delay:0.0
                    options:UIViewAnimationOptionCurveEaseIn
                 animations:^{
                     [labelView setAlpha:0.0];
                 }
                 completion:nil
 ];
}

Um zu überprüfen, ob die Methode aufgerufen wird, setze ich einen Haltepunkt.

Die Aufrufe kehren sofort zurück, aber es wird nur das Ende der Animationen angezeigt.

Ich habe das UIView mit dem Controller verkabelt.

Bitte helfen Sie mir, ich stecke fest.

Vielen Dank im Voraus! Patrick

5voto

jackslash Punkte 8545

Richtig,

Wenn Sie Ansichten auf diese Weise animieren, wird die Animation erst beim nächsten Durchlauf der Runloop (d. h. wenn Ihre Methode zurückkehrt) auf dem Bildschirm angezeigt.

UIView fügt Animationen zusammen, die nacheinander programmiert wurden.

Verwenden Sie den Abschlussblock, um wieder auszublenden. Der Code sieht ein bisschen seltsam aus, aber er funktioniert großartig!

[UIView animateWithDuration:5.0
                      delay:0.0
                    options:UIViewAnimationOptionCurveEaseIn
                 animations:^{
                     [labelView setAlpha:1.0];
                 }
                 completion:^(BOOL completed){
                     [UIView animateWithDuration:5.8
                                           delay:0.0
                                         options:UIViewAnimationOptionCurveEaseIn
                                      animations:^{[labelView setAlpha:0.0];}
                                      completion:nil];
                 }];

Als Antwort auf Ihre Kommentare:

Die Animationen werden erst beim nächsten Durchlauf der Runloop gestartet. Sie beginnen erst, wenn Ihre Anwendung ihre Arbeit beendet hat. Wenn Sie in der Schleife warten, werden Sie das gleiche Problem haben und auch Ihre Schnittstelle einfrieren. Ziehen Sie in Erwägung, für jeden Buchstaben eine eigene Beschriftung zu verwenden, und fügen Sie für jede Animation eine immer größere Verzögerung hinzu. Alle diese Animationsanweisungen werden auf einmal in eine Warteschlange gestellt und dann im Laufe der nächsten, wie vielen Sekunden auch immer, abgespielt. Stellen Sie sich vor, Sie sind ein Filmregisseur und sagen jedem Schauspieler, was er in der nächsten Szene tun soll. Wenn dann jeder weiß, was er zu tun hat, lehnen Sie sich zurück, rufen "Action" und sehen zu, wie sich das Ganze abspielt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X