0

我正在尝试CALayerduration. 我需要你的帮助和实现这一目标的任何想法。

我试过这样:

CABasicAnimation *pathAnimation = 
 [CABasicAnimation animationWithKeyPath:@"fillColor"];
pathAnimation.duration = 5.0;
pathAnimation.fromValue = [NSNumber numberWithFloat:0.0f];
pathAnimation.toValue = [NSNumber numberWithFloat:1.0f];
[annotation addAnimation:pathAnimation forKey:@"fillColorAnimation"];

但是没有变化......

任何想法将不胜感激。

谢谢大家。

4

2 回答 2

5

如果你想用一种颜色填充任意形状,就好像颜色像水一样从底部流到顶部,你实际上需要两个或更多形状层。

创建完全成型的形状层,填充颜色到位。然后创建第二个形状图层,其路径为 4 条线,形成一个与第一个形状图层大小相同的矩形。最初,使矩形成为第一个形状层底部的水平线,面积为零。安装第二个形状层作为第一个形状层的遮罩层。

创建一个动画,将第二个(蒙版)层的形状从底部的零粗线更改为第一个形状层的完整边界。这将导致第二个形状图层为从第一个形状图层边界的底部到顶部生长的矩形设置动画。由于第二个形状图层是第一个图层的蒙版,因此动画将导致第一个形状图层在动画运行时从上到下显示。

如果您需要从动画开始处就位形状的轮廓并在形状内部进行动画填充,则在第一个形状图层的顶部添加一个形状图层的副本,设置为仅描边形状,而不是填充它。使该层不透明。它应该绘制形状的轮廓,另一个形状图层/蒙版对的动画应该填充轮廓下方的内部。

于 2012-10-20T01:50:15.673 回答
0

如果有人在这里寻找代码,那就是 Swift 5:

private let fillLayer = CAShapeLayer()
private let fillMaskLayer = CAShapeLayer()

layer.addSublayer(fillLayer)

fillLayer.path = fillLayerPath().cgPath
fillLayer.fillColor = UIColor.white.cgColor

fillMaskLayer.path = fillPathBottom().cgPath
fillMaskLayer.fillColor = UIColor.white.cgColor

let fillAnimation = CABasicAnimation(keyPath: "path")
fillAnimation.duration = 3.0
fillAnimation.toValue = fillPathFull().cgPath
fillAnimation.repeatCount = .greatestFiniteMagnitude
fillAnimation.timingFunction = CAMediaTimingFunction(name: .easeInEaseOut)
fillLayer.mask = fillMaskLayer

fillMaskLayer.add(fillAnimation, forKey: "fillAnimationPath")
于 2020-12-28T07:16:10.060 回答