2009-05-27 3 views
3

J'ai un bloc d'animation de base où j'appelle une méthode qui va charger un contrôleur de vue. il y a une transition personnalisée entre deux contrôleurs de vue qui se passe. Cependant, lorsque le contrôleur de vue construit l'interface, tout ce matériel est affecté par l'animation du noyau. Bien qu'il en résulte des effets intéressants, je ne veux pas que;)Comment exclure un morceau de code d'un bloc d'animation de base d'une animation?

[UIView beginAnimations:@"jump to view controller" context:self]; 
[UIView setAnimationDuration:0.55]; 
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut]; 

// some animated property-changes here... 

[self loadViewControllerForIndex:targetIndex]; // everything that happens in this method shall not be animated 

UIViewController *controller = [viewControllers objectAtIndex:targetIndex]; 
[controller viewWillAppear:YES]; 
[controller viewDidAppear:YES]; 

[UIView commitAnimations]; 

Malheureusement, je ne peux pas bouger cette partie hors du bloc.

Répondre

10

Vous devriez être en mesure de supprimer des animations pour une partie du bloc d'animation UIView en enveloppant cette section dans une CATransaction et la désactivation des animations pour elle:

[CATransaction begin]; 
[CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions];  

// Changes to disable animation for here 
[CATransaction commit]; 
+0

est-ce pas la même chose que + [CATransaction setDisableActions: YES] dans un bloc d'animation? –

+0

@Andrew - Oui, '-setDisableActions:' a été ajouté dans iPhone OS 3.0 et Snow Leopard, et est identique à '-setValue: forKey:' J'utilise ci-dessus. J'avais attrapé ceci d'un certain code plus ancien que j'ai utilisé dans 2.0. –

+0

Cela fonctionne bien pour moi, merci de partager cela. En outre, c'est mieux que l'approche [UIView setAnimationsEnabled: NO] que quelqu'un d'autre a posté ici (et apparemment supprimé la nuit dernière). Parce que cette approche a simplement désactivé * toute * animation, y compris celle que l'appelant a pu mettre en place pour lui-même. – uliwitness

Questions connexes