UIViewのdrawRectメソッドでパスを描画しています。特定の状況では、そのパスが消えて、これをアニメートしたいと思います。これをパスの「描画解除」と呼びましょう。
アニメーションの場合、CAShapeLayerを作成し、myPathを指定してから、CABasicAnimation(animationWithKeyPath:@ "strokeEnd")を設定します。
私の問題は、drawRectで描画されたものからアニメーションに切り替える方法です。drawRectから描画されたものからmyPathを削除し、setNeedsDisplayを呼び出す必要があります。そうしないと、アニメーションはdrawRectから描画されたパスによって非表示になります。
- (void)animationDidStart:(CAAnimation *)theAnimation
{
myPath = nil;
[self setNeedsDisplay];
}
しかし、このようにしてパスが表示され、パスがない状態ですばやくちらつきます。その後、パスはCoreAnimationによって再度レンダリングされ、うまく描画されません。
ちらつきを避けるためにもっとうまくできますか?
背景 これは私がアニメーションを設定する方法です:
- (void) startAnimation
{
pathLayer.path = myPath.CGPath;
pathLayer.hidden = false;
CABasicAnimation *pathAnimation = [CABasicAnimation animationWithKeyPath:@"strokeEnd"];
pathAnimation.duration = 1;
pathAnimation.fromValue = [NSNumber numberWithFloat:1.0f];
pathAnimation.toValue = [NSNumber numberWithFloat:0.0f];
pathAnimation.fillMode = kCAFillModeForwards;
pathAnimation.removedOnCompletion = NO;
pathAnimation.delegate = self;
[pathLayer addAnimation:pathAnimation forKey:@"strokeEnd"];
}