4

瞬時に描画されたポイントのパス全体ではなく、CGPath が作成されたときに (各線が追加されたときに) 描画することは可能ですか? 線が追加されたときにパスが描画されるのを確認したいと思います。

また、大きなパスの一部として一度に 1 本の線を描くことはできますか?

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 に答える