在图像1,2,3之间翻转而不是图像1,3(iPhone SDK)

时间:2010-02-12 04:34:57

标签: iphone core-animation uiimageview

我正在使用一些非常标准的代码来翻转小视图中的2个UIImageViews。 (我很惊讶它有效!)

但是如果我在一个小视图中有 THREE UIImageViews并想在所有3个之间翻转怎么办?

我以为我可以剪切/粘贴我的代码的两个副本......但我猜不是。
当我尝试翻转1> 2 ..然后2> 3时......它只翻转一次......直接从1> 3开始。 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:image3]; 
[UIView commitAnimations];

3 个答案:

答案 0 :(得分:1)

动画并没有像这样链接在一起。基本上,他们同时做两个动画。你想要的是为第二次翻转创建一个新方法,在第一次翻转完成后调用:

- (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];
}

然后在现有方法中,输入以下行:

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

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

有关详细信息,请查看apple docs

答案 1 :(得分:0)

您可以在第二个动画的开头设置0.5秒的延迟。

另外,您可能需要查看关键帧动画以执行更高级的操作。

答案 2 :(得分:0)

吉尔,

在第二个代码块中,执行以下操作。

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