2

クォーツを使って手書きをシミュレートする方法はありますか?

ポイントA、B、Cの間にパスがあることを意味します。パスがポイントAから出て、ポイントB、次にCにアニメーション化されるようにしたい.

頭に浮かぶのは、それを行うための2つのオプションです。

  1. 醜い-パスを作成してからマスクし、マスクを移動してパスを明らかにします。作成に時間がかかり、信頼性が低く醜いハック

  2. ポイントA、B、Cを移動し、それらの間に線を引きます。

  3. トレイルを離れるパスに沿って円をアニメーション化する方法はありますか?

テクニック、例はありますか?

ありがとう。

4

3 に答える 3

1

を作成しCAShapeLayer、その をアニメートしpathます。

于 2010-01-16T08:45:42.170 に答える
0

上記のコメントで述べたように、理想的なAPIは、パスに沿って任意のセグメントを描画できるAPIですが、そのようなAPIは見たことがありません。

もう1つのアプローチは、目立たないセグメントであるパスを定義することです。次に、NSBezierPathの要素メソッドを使用してパスに沿って歩き、タイマーまたはNSAnimationを使用して途中で各セグメントを描画します。このアプローチの問題は、任意のパスを使用できないことです。

于 2009-07-18T16:25:33.823 に答える
0

ベジェ曲線は、通常はtと呼ばれる無関係なパラメーターに基づいて点のセットを取得する方法を定義します。完全な曲線をレンダリングするには、tを0から1の間で評価し、各ポイントから次のポイントに線を引きます。完全な曲線よりも少なくレンダリングするには、tを0から1未満の数値まで評価します。曲線の描画をアニメーション化するには、ポイントを評価し、タイマーでセグメントを描画します。

任意のtでベジェ曲線を分割できます。そうすることで、曲線をシステムに渡して描画したり、CAShapeLayerで使用したりできるようになります。

手書きの文字は通常、一連のベジェ曲線またはベジェスプラインになります。ある曲線の終点が次の曲線の始点です。tは、ゼロからスプライン内のセグメントの数になると考えてください。3つの曲線がある場合、tは0から3になると考えてください。tが1から2の場合、最初のセグメント全体と2番目のセグメントの一部をシステムに渡して描画します。

ベジェ曲線を分割するためのDeCasteljauのアルゴリズムについて読むことができます。平面上の3次ベジェ曲線のコードサンプルを次に示します。

// initial curve is four point x0,y0 , x1,y1 , x2,y2 , x3,y3
// x0,y0 and x3,y3 are the anchors
// point to split curve at is 0<t<1

nt    = 1.0 - t;
x01   = nt * x0   + t * x1;
y01   = nt * y0   + t * y1;
x12   = nt * x1   + t * x2;
y12   = nt * y1   + t * y2;
x23   = nt * x2   + t * x3;
y23   = nt * y2   + t * y3;
x012  = nt * x01  + t * x12;
y012  = nt * y01  + t * y12;
x123  = nt * x12  + t * x23;
y123  = nt * y12  + t * y23;
x0123 = nt * x012 + t * x123;
y0123 = nt * y012 + t * y123;

// now the new curve you want is
// x0,y0 , x01,y01 , x012,y012 , x0123,y0123

// the other half of the curve, discarded in your case, is
// x0123,y0123 , x123,y123 , x23,y23 , x3,y3

したがって、手書きの文字を表す一連の曲線が与えられた場合、0からTまでアニメートします。ここでTは曲線の数です。t = T-floor(T)を計算し、tがゼロでない場合は、それを使用してn = floor(T)で曲線を分割します。

于 2010-07-02T04:10:43.947 に答える