2011-03-30 59 views
1

这是一个绝对的初学者问题(抱歉),但我想知道如何提交一个动画,并且一旦它结束以开始另一个动画。想象一下将图像从x = 0移动到x = 300。然后你想再次对同一个图像进行动画处理,但这次从x = 300到x = 330,以便它从屏幕上消失。iPhone:如何在另一个之后提交两个动画

以下代码将只执行从x = 300到x = 330的动画,并且不会将动画x = 0提交到x = 300。我确定我没有得到commitAnnimation的概念,而且这很明显,但是我该如何做两个动画?

我知道我可以将图像直接移动到330,但我不想这样做,因为我需要第一个动画(x 0 - 300)与另一个动画同步。

这里是我的(错误的)代码:

[UIView beginAnimations:@"shadowMove" context:nil]; // Begin animation 
[UIView setAnimationDuration:0.5]; 
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 

[imageView setFrame:CGRectOffset([imageView frame], 300, 0)]; 

[UIView commitAnimations]; // End animations 


// Second Animation 


[UIView beginAnimations:@"shadowMoveRestAway" context:nil]; // Begin animation 
[UIView setAnimationDuration:0.5]; 
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 

[imageView setFrame:CGRectOffset([imageView frame], 330, 0)]; // Move imageView off screen 

[UIView commitAnimations]; // End animations 

回答

8

使用委托方法

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

当第一动画结束到别的东西开始。因此,在animationDidStop:finished:context方法中放入你想要做的事情,记住iphone是一个事件驱动的环境,所以像上面这样的线性代码几乎可以同时启动每个动画。

编辑:

我忘了补充一点,你需要设置动画的代表以及否则你不会得到该事件时,第一个停止 - 见下文;

下面是您的代码的完整版本 - 更改 - 我使用缩写animationDidStop委托,因为这更容易理解和罚款这个例子。

[UIView beginAnimations:@"shadowMove" context:nil]; // Begin animation 
[UIView setAnimationDuration:0.5]; 
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 
[UIView setAnimationDelegate:self]; 
[UIView setAnimationDidStopSelector:@selector(myFirstAnimationDidStop)]; 
[imageView setFrame:CGRectOffset([imageView frame], 300, 0)]; 
[UIView commitAnimations]; // End animations 

然后你只需要一个像这样的新方法;

-(void) myFirstAnimationDidStop { 
// Second Animation 

[UIView beginAnimations:@"shadowMoveRestAway" context:nil]; 
[UIView setAnimationDuration:0.5]; 
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 
[imageView setFrame:CGRectOffset([imageView frame], 330, 0)]; 
[UIView commitAnimations]; 
} 

为了完整性,在您的界面(.h)文件中,您应该添加;

- (void)myFirstAnimationDidStop;

@选择器很容易,它只是一种指向另一种方法的方式 - 希望这个例子能够澄清这一点。

+0

谢谢!请试试这个。在这种情况下,也可以简单地调用另一种方法,例如, [UIView secondAnimation:nil];然后定义另一个方法,我有第二个动画?这似乎更容易(至少在我的初学者的心中)比使用@选择器(我不知道该如何工作)更容易?对于这样的问题感到抱歉,并且非常感谢您的回复。 – 2011-03-30 12:48:05

+1

查看更新后的答案 - 我忘记了您需要设置动画代理,但我现在已经为您完成了一个完整的示例。希望有所帮助。 – Roger 2011-03-30 14:20:20

+0

这真是太好了。你让我很快乐! – 2011-03-30 16:46:32

相关问题