0

Quartz 2dを使用して、既存の線にポイントを徐々に追加して、アニメーション化された成長線を描画しようとしています。UIViewのdrawRectメソッドで、CGContextRefを取得し、その描画プロパティを設定して、最初のポイントを(0,0)に移動することにより、新しい線の描画を開始しました。

CGContextRef context= UIGraphicsGetCurrentContext();
CGContextSetStrokeColorWithColor(context,[UIColor blueColor].CGColor);
CGContextSetLineWidth(context, 2);
CGContextMoveToPoint(context,0,0);

後で、次のdrawRect呼び出しで、その行を拡張して、もう一度CGContextRefを取得し、それに新しいポイントを追加しようとしました。

GContextRef context= UIGraphicsGetCurrentContext();
CGContextAddLineToPoint(context,x,y);

しかし、現在のCGContextRefには、最後のdrawRect呼び出しからの以前のCGContextMoveToPointコマンドの記録がないようです。したがって、すでに線を描き始めたという参照はありません。

私はここで何か間違ったことをしていますか?すでに描かれた線を参照する方法はありますか?

4

2 に答える 2

1

基本的に、への各呼び出しをdrawRect最初から開始したかのように扱う必要があります。ビューのサブレクトのみを更新するように求められた場合でも、描画位置や色など、グラフィックスコンテキストに関連付けられた状態はすべてリセットされていると想定する必要があります。したがって、あなたの場合、開始位置を追跡し、毎回線全体を再描画する必要があります。

于 2010-12-21T16:03:44.007 に答える
0

より良いアプローチは、いくつかの薄いUIViewをアニメーション化することだと思います。ここで私の答えを見てください。
水平線以上のものが必要な場合は、そのビューを回転させます。パフォーマンス的には良いと思います。

于 2012-05-15T16:20:41.493 に答える