0
我想实现一个嵌套的动画块。我面临的问题是只有我的完成块代码被调用。当我发表评论时,最初的部分被调用。如何让动画完成第一个动画,然后再调用第二个动画?UIView动画块问题
- (void)viewDidAppear:(BOOL)animated
{
_finalLogoCenter = self.logoImage.center;
// Logo Animation
[self logoAnimation];
}
- (void) logoAnimation
{
[UIView animateWithDuration:1.0
delay:0.0
options:UIViewAnimationOptionTransitionNone
animations:^ {
// Move Up
[self moveLogoUpFirst];
}completion:^(BOOL finished)
{
// Move below final point
[self moveLogoDownBeyondFinalPoint];
}];
}
- (void) moveLogoUpFirst
{
__block CGPoint logoCenter = self.logoImage.center;
logoCenter.y = 290.0f;
self.logoImage.center = logoCenter;
[self.logoImage setAlpha:0.0f];
[UIView animateWithDuration:1.0
delay:0.0
options:UIViewAnimationOptionTransitionNone
animations:^ {
logoCenter.y = _finalLogoCenter.y - 20;
self.logoImage.center = logoCenter;
[self.logoImage setAlpha:1.0f];
}completion:nil];
}
- (void) moveLogoDownBeyondFinalPoint
{
__block CGPoint logoCenter = self.logoImage.center;
self.logoImage.center = logoCenter;
[UIView animateWithDuration:1.0
delay:0.0
options:UIViewAnimationOptionTransitionNone
animations:^ {
logoCenter.y = _finalLogoCenter.y + 5;
self.logoImage.center = logoCenter;
}completion:nil];
}
尝试用performSelector waitUntilDone – Jasper
@JasperPol谢谢。这确实有效。但我需要计算以前的动画的时间,并在afterDelay中设置它。完成块不会处理这个问题吗? – Anil
好吧,你知道动画需要1秒,所以完成块在1秒后被触发。检查这个答案,它可能是一个更好的方式来动画你想要做的事情:http://stackoverflow.com/questions/1632364/shake-visual-effect-on-iphone-not-shaking-the-device/10007898# 10007898 – Jasper