CAKeyframeAnimation - 停止无限循环

时间:2015-09-16 01:21:22

标签: ios objective-c macos cakeyframeanimation

我有以下几行代码来运行带有一些帧的动画。

- (void)setAnimation {
    /* creating a layer */
    CALayer *layer = [[CALayer alloc] init];
    [layer setBounds:self.bounds];
    [layer setPosition:NSMakePoint(CGRectGetMidX(self.bounds),CGRectGetMidY(self.bounds))];
    [self.layer addSublayer:layer];

    /* creating frames */
    NSArray *array = [appDelegate getAnimationFrames]; // Extracting an array containing NSImage objects from appDelegate

    /* setting up animation */
    keyFrameAnimation = [CAKeyframeAnimation animation]; // A CAKeyframeAnimation object declared in the header file
    [keyFrameAnimation setKeyPath:@"contents"];
    [keyFrameAnimation setValues:array];
    [keyFrameAnimation setCalculationMode:@"discrete"];
    [keyFrameAnimation setRemovedOnCompletion:NO];
    [keyFrameAnimation setRepeatCount:HUGE_VALF];
    keyFrameAnimation.duration = 1.0;
    [layer addAnimation:keyFrameAnimation forKey:nil];
}

这是我第一次使用 CAKeyframeAnimation 。它现在工作正常。我唯一的问题是如果重复计数设置为 HUGE_VALF ,如何打破循环。 API文档在这方面似乎没有帮助,因为如果我搜索“setRepeatCount”,它将不返回任何内容。同时,代码是针对Cocoa应用程序的,但我也会为iOS打开这个主题,因为就这个主题而言,OS X和iOS之间几乎没有任何分离。

感谢。

1 个答案:

答案 0 :(得分:3)

将动画添加到图层后,图层会创建副本,因此对动画对象的进一步更改不会执行任何操作。

您可以使用[layer removeAllAnimations]停止动画。