开发者

Flip between Image 1, 2, 3 instead of Image 1,3 (iPhone SDK)

I'm using some pretty standard code to flip 2 UIImageViews that are inside a small view. (I'm amazed it worked!)

But what if I had THREE UIImageViews inside a small view... and wanted to flip between all 3?

I thought I could just cut/paste 2 copies of my code... but I guess not.

When I try to flip 1>2.. and then 2>3... it just flips once... going directly from 1>3. What happened to 2????

[UIView beginAnimations:nil context:NULL]; 
[UIView setAnimationDuration:0.5]; 
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:myView cache:YES]; 
[image1 removeFromSuperview];    
[myView addSubview:image2];
[UIView commitAnimations];

[UIView beginAnimations:nil context:NULL]; 
[UIView setAnimationDuration:0.5]; 
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:myView cache:YES]; 
[image2 removeFromSuperview];    
[myView addSubview:imag开发者_开发百科e3]; 
[UIView commitAnimations];


The animations are not chained together like this. Basically, they are doing both animations at the same time. What you want is to create a new method for the second flip that will be called after the first one is done:

- (void)animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)contextn {
    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationDuration:0.5]; 
    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:myView cache:YES]; 
    [image2 removeFromSuperview];    
    [myView addSubview:image3]; 
    [UIView commitAnimations];
}

Then in your existing method, put this line:

[UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)];

like so:

[UIView beginAnimations:nil context:NULL]; 
[UIView setAnimationDuration:0.5]; 
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:myView cache:YES];
[UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)];
[image1 removeFromSuperview];    
[myView addSubview:image2];
[UIView commitAnimations];

For more info, check the apple docs


You could set a 0.5 second delay on the start of the second animation.

Also, you may want to check out keyframe animations to do more advanced stuff like this.


Jill,

In your second code block, do the following.

[UIView beginAnimations:nil context:NULL];

// This will cause your second animation block to wait 0.5 second, which will be 
// enough time for the second one to kick in and do it's thing.
[UIView setAnimationDelay:0.5];

[UIView setAnimationDuration:0.5]; 
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:myView cache:YES]; 
[image2 removeFromSuperview];    
[myView addSubview:image3]; 
[UIView commitAnimations];
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜