Mik*_*ike 0 core-animation calayer ios
请考虑以下动画:
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;
Run Code Online (Sandbox Code Playgroud)
这将基本上为从一端到下一端的图层绘制动画.问题是,一旦动画完成,该strokeEnd属性将重置为0(最初设置的位置).如何使最终值"坚持"?
我试图在animationDidStop委托方法中更改它.这大部分都有效,但strokeEnd即使放入CATransaction以禁用动画,也可能会暂时导致0 闪烁.我也玩过additive和cumulative属性无济于事.有什么建议?
您只需将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
Run Code Online (Sandbox Code Playgroud)
如果strokeEnd隐式可动画(以便该行本身会导致动画),我们将首先关闭隐式动画:
[CATransaction setDisableActions:YES];
theLayer.strokeEnd = 1;
Run Code Online (Sandbox Code Playgroud)
请注意,你pathAnimation.removedOnCompletion = NO;错了,其他答案也是如此kCAFillModeForwards.两者都是基于对Core Animation如何工作的误解.
| 归档时间: |
|
| 查看次数: |
1489 次 |
| 最近记录: |