Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to do a flip animation between more than two UIViews?

I have animation code in a class that extends the UIView:

// 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];

This animation code works fine for two views. But I am trying to do this for many views. I tried by adding in a global variable (nextview index and currentView index), however this doesn't work since each custom view class has it's own instance and these variables aren't shared.

Does anyone know how I can accomplish what I want to do?

Thanks!

Edit: I would be able to do this, if I could use [self superview] to access the index of the currentview and of the nextview. Are there some methods to do this?

like image 465
rksprst Avatar asked Oct 26 '08 21:10

rksprst


3 Answers

Apple have a pretty good tutorial on view transitions here. Other than the way they implement them you can also look at using a UINavigationController which manages a bunch of views and transitioning between them.

Essentially you need to manage the transition in the superview rather than the view - the superview can know who it's currently displaying and who's next.

like image 143
Max Stewart Avatar answered Nov 15 '22 08:11

Max Stewart


If you have pointers to the views you're trying to switch between, just call -removeFromSuperview on the "from" view and -addSubview:(the "to" view) on the superview. The transition doesn't rely on any particular method call; more or less any form of the "swap two views" approach will be animated properly.

like image 45
Noah Witherspoon Avatar answered Nov 15 '22 09:11

Noah Witherspoon


For those who find this question who are supporting iOS 4.0 and higher, Apple has provided a built-in API for this task:

See: transitionFromView:toView:duration:options:completion:

like image 21
Matt James Avatar answered Nov 15 '22 09:11

Matt James