2010-11-09 13 views
5

Mam dziwny problem z blokami animacji iPhone'a. ten kod:UIView animateWithDuration: delay: działa dziwnie

[UIView animateWithDuration:2 delay: 0 options: 0 animations: 
^(void) { [controller setBackgroundColor: [UIColor blueColor]]; } 
completion: nil]; 

[UIView animateWithDuration:2 delay: 2 options: 0 animations: 
^(void) { [controller setBackgroundColor: [UIColor redColor]]; } 
completion: nil]; 

natychmiast ustawia tło na czerwono, bez przechodzenia w stan niebieski. samo nawet dla tego kodu:

[UIView animateWithDuration:2 delay: 0 options: 0 animations: 
^(void) { [controller setBackgroundColor: [UIColor blueColor]]; } 
completion: 

^(BOOL wrwg) { 
    [UIView animateWithDuration:2 delay: 2 options: 0 animations: 
    ^(void) { [controller setBackgroundColor: [UIColor redColor]]; } 
    completion: nil]; 
}]; 

To jest, gdzie próbuję uruchomić drugą animację po pierwszym zakończeniu. W czym problem?

+0

Jaki typ obiektu to kontroler? UIView, UILabel, inne? – Anna

Odpowiedz

3

prostu miałem ten problem, a ja zwykle mają. Są dwie przyczyny, chociaż jedna z nich jest jeszcze do przetestowania.

Po pierwsze, zapomniałem podłączyć konstruktora interfejsu do animowanego widoku, dlatego blok powiedział "Animuj na zero" Nie ma nic do zrobienia, więc przejdę do bloku ukończenia! "

Inną przyczyną jest to, że jest coś do zrobienia, ale nie jest to właściwość animacyjna (ukryta) i założę się, że blok ukończenia jest wywoływany, gdy zmienne w animacji pasują do "do" lub " stan końcowy. To tylko teoria, ale założę się, że jest to osobny wątek, który wykonuje w pewnym tempie z: if (currentValueOfProperty = finalValue) doCompletion(). (przepraszam pseudo kod).

Ktoś powinien sprawdzić, prawdopodobnie, choć

5

Property backgroundColor jest NIE animowane w UIView. Zamiast tego należy użyć właściwości backgroundColor warstwy widoku:

#import <QuartzCore/QuartzCore.h> // don't forget to link this library in project settings 

[UIView animateWithDuration:2.0 
         delay:0.0 
        options:UIViewAnimatingOptionBeginFromCurrentState 
       animations:^(void){ 
        controller.layer.backgroundColor = [UIColor blueColor].CGColor; 
       } 
       completion:NULL]; 

P.S. Jak wskazano w poprzednich postach, upewnij się, że Twój controller jest dziedziczony po UIView. Jeśli jest odziedziczony po UIViewController, użyj zamiast tego controller.view.

Powiązane problemy