2010-02-12 36 views
3

我正在使用一些非常标准的代码来翻转2个UIImageViews,它们位于一个小视图内。 (我很惊讶它的工作!)在图像1,2,3之间翻转而不是图像1,3(iPhone SDK)

但是,如果我有 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]; 

回答

0

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

此外,你可能想看看关键帧动画来做更高级的东西。

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

+0

哇......好的......我会试试看。但我认为“提交动画”是“现在就做”的全部内容......而不是“现在不要这样做......等到我跑另一个翻转......然后取消前一个,完全...”。 。 没有警告”。 – Bonnie

+0

>欲了解更多信息,请检查苹果文档 我已经阅读了尽可能多的iPhone文档页数...我可能会站。而且我仍然错过了关于“提交动画现在并不真正执行动画”的部分。 – Bonnie

+0

@comment 1 - 它不会取消它,它们同时发生。 @comment 2 - iPhone默认为单线程。当你的方法仍在运行时,唯一能让它工作的方法是让这些方法在后台运行并调用performSelectorOnMainThread(因为所有的UI都必须位于主线程中)。但即使如此,动画只会比以前更早开始纳秒。 CommitAnimations不是一个同步调用...意味着你的应用程序不会在这两个动画之间暂停。 – coneybeare

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