CAKeyframeAnimation : 停止时内容变回第一张图片
Posted
技术标签:
【中文标题】CAKeyframeAnimation : 停止时内容变回第一张图片【英文标题】:CAKeyframeAnimation : contents change back to first image when stopped 【发布时间】:2012-08-22 11:47:28 【问题描述】:我使用以下代码为CALayer
的内容制作动画:
CAKeyframeAnimation *countanimation = [CAKeyframeAnimation animation];
NSArray *images = [NSArray arrayWithObjects:(id)[UIImage imageNamed:@"number3"].CGImage,
(id)[UIImage imageNamed:@"number2"].CGImage,
(id)[UIImage imageNamed:@"number1"].CGImage, nil];
[countanimation setKeyPath:@"contents"];
[countanimation setValues:images];
[countanimation setCalculationMode:kCAAnimationDiscrete];
[countanimation setDuration:3.0f];
[countanimation setDelegate:self];
[countanimation setAutoreverses:NO];
[countanimation setRemovedOnCompletion:NO];
[countanimation setValue:@"Countdown" forKey:@"name"];
[countDown addAnimation:countanimation forKey:nil];
并且想在动画停止时隐藏图层:
- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag
if([[anim valueForKey:@"name"] isEqual:@"Countdown"])
[countDown setHidden:YES];
...
问题是该层与原始图像(编号3)一起闪烁一次,然后隐藏。
我想知道为什么即使我将removedOnCompletion
设置为NO
,图层也会变回原来的状态。
【问题讨论】:
【参考方案1】:您可以将FillMode
属性与removedOnCompletion
属性结合使用,在repeatCount
结束后将第一帧设置回其内容。
[countanimation setFillMode:kCAFillModeBoth];
[countanimation setRemovedOnCompletion:NO];
我认为这两行代码可以帮助你得到所需的结果。
【讨论】:
我刚刚发现,如果您使用的是 CAAnimationGroup,这些设置需要在组中,而不是单个动画,以防万一来这里的人有所帮助【参考方案2】:我使用animation.fillMode = kCAFillModeForwards;
解决了这个问题
【讨论】:
【参考方案3】:我把原图换成number1,问题就解决了。
【讨论】:
【参考方案4】:斯威夫特 4+5
更新 Jami 对 Swift 4 和 5 的回答
colorAnimation.fillMode = .both
colorAnimation.isRemovedOnCompletion = false
【讨论】:
以上是关于CAKeyframeAnimation : 停止时内容变回第一张图片的主要内容,如果未能解决你的问题,请参考以下文章
CAKeyframeAnimation 完成时如何指定选择器?
在动画集结束时在 MonoTouch 中实现 CAKeyFrameAnimation 回调?
CAAnimationGroup 与 CAKeyframeAnimation 和 CABasicAnimation