等待动画到iOS中完成? [关闭](Wait for Animation to finish i

2019-09-01 22:50发布

我希望动画完成后执行doSomethingElse。 另一个限制是,动画代码可以是不同的持续时间。 我怎样才能做到这一点? 谢谢!

-(void) doAnimationThenSomethingElse {
  [self doAnimation];
  [self doSomethingElse];
}

例如,这不工作:

animationDuration = 1;
[UIView animateWithDuration:animationDuration
    animations:^{
      [self doAnimation];
    } completion:^(BOOL finished) {
      [self doSomethingElse];
    }
];

Answer 1:

当你不是动画的作者,你可以当动画通过使用交易完成块结束得到一个回调:

[CATransaction setCompletionBlock:^{
     // doSomethingElse
}];
// doSomething


Answer 2:

使用块动画:

[UIView animateWithDuration:animationDuration
    animations:^{
        // Put animation code here
    } completion:^(BOOL finished) {
        // Put here the code that you want to execute when the animation finishes
    }
];


Answer 3:

你需要能够访问您正在运行的动画的具体事例,以协调为每一个完成的动作。 在你的榜样,[自doAnimation]不公开我们所有动画,所以你的问题不能被“解决”与您所提供的内容。

有几种方法可以实现你想要的,但要看是什么样的,你要处理的动画。

在其他的答案所指出的,在视图上的动画之后执行代码的最常见的方式是通过一个completionBlock中: animateWithDuration:completion:另一种方式来处理属性变化的动画是设置CATransaction的范围之内完成块交易。

然而,这些特殊的方法基本上是为动画属性或层次改变意见。 这是当你的动画涉及的观点和它们的属性推荐的方式,但它并没有涵盖所有种类的动画,你可能在iOS中,否则找。 从你的问题,它并不清楚你使用什么样的动画(或者怎么样,或者为什么),但如果你是CAAnimations的实际接触情况(关键帧动画或一组动画的),你会通常做的是建立一个委托:

CAAnimation *animation = [CAAnimation animation];
[animation setDelegate:self];
[animatedLayer addAnimation:animation forKeyPath:nil];

// Then implement the delegate method on your class
- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag
{
    // Do post-animation work here.
}

问题的关键是,你完成处理实现是如何依赖于你的动画是如何实现的。 在这种情况下,我们不能看到后者,所以我们不能确定前者。



Answer 4:

http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIView_Class/UIView/UIView.html

有UIView的文档,向下滚动到

与块动画浏览

动画视图

看“动画与块视图”读书的方法的名称下是跳到你解释如何制作动画的看法,您要的是那些在页面的不同部分的超链接使他们的自我解释



Answer 5:

从你的意见,我会建议你:

-(void) doAnimation{
    [self setAnimationDelegate:self];
    [self setAnimationDidStopSelector:@selector(finishAnimation:finished:context:)];
    [self doAnimation];
}

- (void)finishAnimation:(NSString *)animationId finished:(BOOL)finished context:(void *)context {
    [self doSomethingElse];
}


文章来源: Wait for Animation to finish in iOS? [closed]