4

是否可以在创建时绘制 CGPath(添加每条线),而不是瞬间绘制点的整个路径?我想看到在添加线条时绘制的路径。

另外,是否可以一次绘制一条线作为较大路径的一部分,而不是每次都用一条额外的线在其自身上绘制路径?

4

2 回答 2

4

如果您使用 CAShapeLayer 并将路径设置为其路径属性,则可以为 strokeEnd 值设置动画。

我不知道动态添加它会有多简单,但我之前用它来为沿途的时间点制作动画(但这些线的整个路径都是事先知道的)

于 2012-08-05T13:10:24.007 回答
3

@wattson12 绝对正确。这是我过去如何做的一个例子:

- (void)animateBezier
{
    CAShapeLayer *bezier = nil;
    UIBezierPath *bezierPath = [self bezierPath]; // clearly, generate your path anyway you want

    bezier = [[CAShapeLayer alloc] init];

    bezier.path = bezierPath.CGPath;
    bezier.strokeColor = [UIColor redColor].CGColor;
    bezier.fillColor   = [UIColor clearColor].CGColor;
    bezier.lineWidth   = 5.0;
    bezier.strokeStart = 0.0;
    bezier.strokeEnd   = 1.0;
    [self.view.layer addSublayer:bezier];

    CABasicAnimation *animateStrokeEnd = [CABasicAnimation animationWithKeyPath:@"strokeEnd"];
    animateStrokeEnd.duration  = 1.0;
    animateStrokeEnd.fromValue = [NSNumber numberWithFloat:0.0f];
    animateStrokeEnd.toValue   = [NSNumber numberWithFloat:1.0f];
    [bezier addAnimation:animateStrokeEnd forKey:@"strokeEndAnimation"];
}

我不知道这是否是您想要的,或者您是否还想稍后动画添加路径中的附加点。如果这是您想要的,您可能会做一些相应的调整 fromValue 的操作,或者将另一个段的绘图动画化为单独的路径。

于 2012-08-05T20:25:32.950 回答