rksprst
rksprst

Reputation: 6631

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?

Upvotes: 5

Views: 22733

Answers (4)

Matt James
Matt James

Reputation: 491

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:

Upvotes: 1

Max Stewart
Max Stewart

Reputation: 3583

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.

Upvotes: 5

Noah Witherspoon
Noah Witherspoon

Reputation: 57149

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.

Upvotes: 2

Nick Stinemates
Nick Stinemates

Reputation: 44130

I think a Linked List of views might be what you should think about implementing.

Upvotes: 0

Related Questions