CAKeyframeAnimation 完成时如何指定选择器?

Posted

技术标签:

【中文标题】CAKeyframeAnimation 完成时如何指定选择器?【英文标题】:How to specify selector when CAKeyframeAnimation is finished? 【发布时间】:2010-03-18 07:37:31 【问题描述】:

我正在使用 CAKeyframeAnimation 沿 CGPath 为视图设置动画。动画完成后,我希望能够调用其他方法来执行其他操作。有什么好办法吗?

我研究过使用 UIView 的 setAnimationDidStopSelector:,但是从文档看来,这似乎只适用于在 UIView 动画块(beginAnimations 和 commitAnimations)中使用。为了以防万一,我也试了一下,但它似乎不起作用。

这是一些示例代码(这是在自定义 UIView 子类方法中):

// These have no effect since they're not in a UIView Animation Block
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)];    

// Set up path movement
CAKeyframeAnimation *pathAnimation = [CAKeyframeAnimation animationWithKeyPath:@"path"];
pathAnimation.calculationMode = kCAAnimationPaced;
pathAnimation.fillMode = kCAFillModeForwards;
pathAnimation.removedOnCompletion = NO;
pathAnimation.duration = 1.0f;

CGMutablePathRef path = CGPathCreateMutable();
CGPathMoveToPoint(path, NULL, self.center.x, self.center.y);

// add all points to the path
for (NSValue* value in myPoints) 
    CGPoint nextPoint = [value CGPointValue];
    CGPathAddLineToPoint(path, NULL, nextPoint.x, nextPoint.y);


pathAnimation.path = path;
CGPathRelease(path);

[self.layer addAnimation:pathAnimation forKey:@"pathAnimation"];

我正在考虑的一种解决方法应该可行,但似乎不是最好的方法,是使用 NSObject 的 performSelector:withObject:afterDelay:。只要我将延迟设置为等于动画的持续时间,就可以了。

有没有更好的方法?谢谢!

【问题讨论】:

【参考方案1】:

或者您可以将动画附上:

[CATransaction begin];
[CATransaction setCompletionBlock:^
                   /* what to do next */
               ];
/* your animation code */
[CATransaction commit];

并设置完成块来处理你需要做的事情。

【讨论】:

【参考方案2】:

CAKeyframeAnimation 是 CAAnimation 的子类。 CAAnimation 中有一个delegate property。委托可以实现-animationDidStop:finished: method。其余的应该很容易。

【讨论】:

太好了,谢谢!我在查看文档时一定错过了这一点。 这就是为什么你不应该在这里链接和写答案。所有链接都断开了!【参考方案3】: 此answer 的

Swift 3 语法。

CATransaction.begin()
CATransaction.setCompletionBlock 
    //Actions to be done after animation

//Animation Code
CATransaction.commit()

【讨论】:

以上是关于CAKeyframeAnimation 完成时如何指定选择器?的主要内容,如果未能解决你的问题,请参考以下文章

CAKeyframeAnimation : 停止时内容变回第一张图片

如何使用 CAKeyFrameAnimation 继续旋转视图?

如何使用 CAKeyframeAnimation 变换旋转检测某些旋转进度?

如何在 Iphone 中停止 CAKeyFrameAnimation

在动画集结束时在 MonoTouch 中实现 CAKeyFrameAnimation 回调?

如何同步几个不同图层的 CAKeyframeAnimation 动画?