2008-10-26 8 views
5

J'ai le code d'animation dans une classe qui étend la UIView:Comment faire une animation flip entre plus de deux UIViews?

// Start Animation Block 
CGContextRef context = UIGraphicsGetCurrentContext(); 
[UIView beginAnimations:nil context:context]; 
[UIView setAnimationTransition: UIViewAnimationTransitionFlipFromLeft forView:[self superview] cache:YES]; 
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 
[UIView setAnimationDuration:1.0]; 

//int nextView = currentView + 1; 
// Animations 
[[self superview] exchangeSubviewAtIndex:0 withSubviewAtIndex:1]; 
//And so I would do: [[self superview exchangeSubviewAtIndex:currentView withSubviewAtIndex:nextView]; 
//Doesn't work because curentView is not global... with each instance of a class it's reset to what it's instanciated to. 
//currentView++; 

// Commit Animation Block 
[UIView commitAnimations]; 

Ce code d'animation fonctionne très bien pour les deux points de vue. Mais j'essaye de faire ceci pour beaucoup de vues. J'ai essayé en ajoutant une variable globale (index de nextview et index de currentView), cependant ceci ne fonctionne pas puisque chaque classe de vue personnalisée a sa propre instance et ces variables ne sont pas partagées.

Est-ce que quelqu'un sait comment je peux accomplir ce que je veux faire?

Merci! Editer: Je serais capable de le faire, si je pouvais utiliser [self-top] pour accéder à l'index de la vue actuelle et de la vue suivante. Existe-t-il des méthodes pour le faire?

Répondre

0

Je pense qu'une liste liée de vues pourrait être ce que vous devriez penser à implémenter.

+0

J'ai un tableau de vues que je crée dans l'appdelegate et j'ajoute un tableau différent à chaque contrôleur de vue d'onglets. Ensuite, le contrôleur utilise ce tableau pour créer des uiviews avec animation pour basculer entre eux. J'ai des problèmes avec le basculement de l'animation ... – rksprst

+0

Il n'est pas nécessaire d'implémenter une liste chaînée. 'NSArray' est parfaitement bien pour ça. Si vous êtes vraiment préoccupé par la performance, lisez [cet article] (http://ridiculousfish.com/blog/?p=27). –

2

Si vous avez des pointeurs vers les vues que vous essayez de basculer entre, appelez -removeFromSuperview sur la vue "from" et -addSubview: (la vue "to") sur le superview. La transition ne repose sur aucun appel de méthode particulier; plus ou moins toute forme de l'approche "échanger deux vues" sera animée correctement.

5

Apple a un très bon tutoriel sur les transitions de vue here. Mis à part la façon dont ils les implémentent, vous pouvez aussi utiliser un UINavigationController qui gère un tas de vues et les fait passer entre eux. En gros, vous devez gérer la transition dans la vue supérieure plutôt que dans la vue - la vue d'ensemble peut savoir qui elle affiche actuellement et qui est la prochaine.

Questions connexes