我如何使一个图层保持CABasicAnimation的最终值
考虑下面的animation:
CABasicAnimation *pathAnimation = [CABasicAnimation animationWithKeyPath:@"strokeEnd"]; pathAnimation.duration = 1.0; pathAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]; pathAnimation.fromValue = [NSNumber numberWithFloat:0.0f]; pathAnimation.toValue = [NSNumber numberWithFloat:1.0f]; pathAnimation.removedOnCompletion = NO; pathAnimation.delegate = self;
这将基本上激活图层从一端到另一端的绘制。 问题是一旦animation完成, strokeEnd
属性将重置为0(最初设置的位置)。 我如何使最终的价值“坚持”?
我试图在animationDidStop委托方法中改变这个。 这大部分工作,但可以在0简要地引起一个strokeEnd
,甚至当放入一个CATransaction里面禁用animation。 我也玩过additive
和cumulative
性质无济于事。 有什么build议么?
您只需将strokeEnd
属性设置为最终值即可! 喜欢这个:
// your current code (stripped of unnecessary stuff) CABasicAnimation *pathAnimation = [CABasicAnimation animationWithKeyPath:@"strokeEnd"]; pathAnimation.duration = 1.0; pathAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]; pathAnimation.fromValue = [NSNumber numberWithFloat:0.0f]; pathAnimation.toValue = [NSNumber numberWithFloat:1.0f]; // just add this to it: theLayer.strokeEnd = 1; // and now add the animation to theLayer
如果strokeEnd
是隐式animation的(所以这一行本身会引起animation),我们首先closures隐式animation:
[CATransaction setDisableActions:YES]; theLayer.strokeEnd = 1;
查看我的书,了解如何使用CABasicAnimation的完整细目: http : //www.apeth.com/iOSBook/ch17.html#_using_a_cabasicanimation
注意你的pathAnimation.removedOnCompletion = NO;
是错误的,其他答案的kCAFillModeForwards
。 两者都是基于对Core Animation如何工作的误解。