2012-11-23 2 views
6

ドーナツのように見え、アニメーション化してドーナツサークルが完成していない(ストロークが閉じていない)ように見える画像があります。説明するのは難しいですが、100になるスピードメーターを想像して50を駆動します。UIGmageを描画するUIGraphicsBeginImageContextWithOptionsの中で、パスと[path addClip]の助けを借りてマスキングを行いました。UIImageをクリップするUIBezierPathをアニメ化する

私の質問は、私がパスをアニメーション化する方法ですか?私はCABasicAnimationと2つのパス(startAngleとendAngleが同じで、2番目のパスはendAngleが目的の角度である最初のパス)を "path"とkeyPathで試しましたが、それは動作しません。

ものは何でもできます;)

答えて

2

私が使用してCABasicAnimationを使用してUIBezierPathをアニメーション...

UIBezierPath *bezierPath = [self bezierPath]; 

CAShapeLayer *bezierLayer = [[CAShapeLayer alloc] init]; 

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

if (animate) 
{ 
    CABasicAnimation *animateStrokeEnd = [CABasicAnimation animationWithKeyPath:@"strokeEnd"]; 
    animateStrokeEnd.duration = 1.0; 
    animateStrokeEnd.fromValue = @0.0f; 
    animateStrokeEnd.toValue = @1.0f; 
    [bezierLayer addAnimation:animateStrokeEnd forKey:@"strokeEndAnimation"]; 
} 
+0

あなたと私は非常に似たアプローチをしています。レイヤのstrokeEndプロパティを直接変更して、CABasicAnimationオブジェクトを作成せずに空の「暗黙のアニメーション」を取得できることに注意してください。 –

+0

@DuncanCパスをアニメーション化する方法がわかっている場合は、その質問に従っているかどうかわかりません。 – Rob

+0

私は質問していませんでした。私はあなたがCABasicAnimationをスキップし、単にstrokeEndプロパティを変更できることを指摘していました。それは暗黙的なアニメーションを作成します。 –

3

私はCAShapeLayerを設定し、シェイプレイヤーは、あなたのドーナツ状をレンダリングさせることを示唆しています。太い線を持つ円弧のCGPathとしてドーナツの形を描画できるはずです。

CAShapeLayerには、strokeStartプロパティとstrokeEndプロパティがあります。どちらも0.0〜1.0の範囲です。デフォルトでは、strokeStartは0.0(最初から開始)で、strokeEndは1.0(パス全体を描画)です。これらのプロパティはアニメーション可能です。

strokeEndを.75から1.0に変更すると、パスの3/4だけが描画され、パスの最後の1/4が描画されます。

gitHubのプロジェクトでは、画像上のシェイプレイヤーをマスクとして使用して、「クロックワイプ」トランジションを作成する方法を示しています。そのためには、弧上の線幅を大きくして、ドーナツ形状を描くのではなく、枠の矩形を完全に塗りつぶすようにします。あなたの場合は、線の太さを小さくしてドーナツを描きます。

Core Animation demo on Github

仕事でシェイプレイヤーのアニメーションを見るためにアプリで「マスクアニメーション」ボタンをクリックしてください。

関連する問題