2010-02-02 8 views
7

Ho provato ad aggiungere un'animazione a viewDidLoad e viewDidAppear, ma non funziona:Come aggiungere un'animazione a UIView in viewDidAppear?

- (void)viewDidAppear:(BOOL)animated{ 
[UIView beginAnimations:@"transition" context:NULL]; 
[UIView setAnimationTransition:110 forView:self.view cache:YES]; 
[UIView commitAnimations]; 
} 

Perché?

risposta

0

Non stai dicendo alla vista in quale stato dovrebbe essere animato, quindi non farà nulla. È necessario inserire il codice tra beginAnimations:context: e commitAnimations che modifica l'aspetto della vista (ad esempio rimuovendo una sottoview e aggiungendone un'altra).

+0

Hm, penso di non aver bisogno di dirglielo. Ho provato il mio codice in un IBAction e funziona. Ho scritto setAnimationTransition: forView: così ho scritto che l'animazione dovrebbe essere nella propria vista. Semplicemente non funziona in viewDidLoad e viewDidAppear-methode. – Flocked

0
  1. Non stai usando beginAnimations: e commitAnimations correttamente. Dovresti mettere qualcosa tra loro che normalmente non sarebbe animato: ad es. con self.view.alpha = 0.5 si ottiene un effetto dissolvenza. Non hanno alcun effetto su tutto ciò che non è tra di loro.

  2. Quando si chiama viewDidAppear:, il tuo punto di vista, beh ... è apparso. È troppo tardi per animare qualsiasi cosa. Che cosa si vuole realmente fare è qualcosa di simile:

    - (void)showMyViewWithAnimation { 
        [UIView beginAnimations:nil context:nil]; 
        [UIView setAnimationTransition:110 forView:childView cache:YES]; 
        [parentView addSubview:childView]; 
        [UIView commitAnimations]; 
    } 
    

    Nell'esempio di cui sopra, childView è ciò che nel tuo esempio si chiama self.view.

  3. Si prega di scrivere il nome della transizione; nessuno sa cosa sia 110 guardandolo. È cattivo stile </pedanteria>

+0

L'errore in questo codice è che dovresti fare "setAnimationTransition: forView:" su "self.view', non" drum.view ". Nei documenti, dice: "Imposta la transizione sulla vista del contenitore". – lawrence

+0

Ma voglio l'effetto per il drum.view;) Questo è il motivo, perché ho cercato di ottenere l'animazione nel viewDidLoad del drumViewController. – Flocked

24

ho avuto lo stesso problema e credo di aver trovato la soluzione a questo SO question.

Quando viene richiamato viewDidAppear, non si vede ancora nulla sullo schermo (nonostante il nome), ma si sta per farlo. È quindi possibile utilizzare un oggetto performSelector: withDelay o un NSTimer per avviare l'animazione. Il ritardo può essere 0,1 e l'animazione verrà riprodotta solo quando viene visualizzata la schermata.

- (void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 

    NSLog(@"View did appear!"); 

    [self performSelector:@selector(animationCode) withObject:nil afterDelay:0.1f]; 
} 

- (void)animationCode { 
    // you animation code 
} 
+0

Questo ha funzionato per me. Grazie! – windson

+0

Ho letto molti articoli prima. E solo questo mi è successo, grazie. –

+0

Grazie! Questo ha funzionato anche per me! –