0

または の上に透明な点または線を追加する方法を知りたいCGPathですNSBezierPath。問題の詳細は次のとおりです。NSBezierPathwidth = 30( orを使用して描画) という実線がありましたが、そのCGPath上に透明なドットまたは透明な線 (厚さ = 2 または 30 より小さいもの) を描画したいと考えました。

4

2 に答える 2

0

を使用し-bezierPathByFlatteningPathます。

レシーバーのコピーを平坦化したら、その長さを計算します。

次に、基本的にポイントの配列であるフラット化されたコピーを反復処理します。カーブ上の正確な位置を確認できるように、連続するポイント間の距離を追跡します。

たとえば、オブジェクトの複数のコピーを描画する場合、フラット化されたコピーのどのセグメントにオブジェクトが存在するかを見つける必要があります。セグメントを見つけたら、そのセグメントの両端の間を線形補間して正確なスポットを見つけます。

NSBezierPath でオブジェクトを配布する

これが達成したいことである場合は、少し詳しく説明して、これを行うために書いたカテゴリを投稿できます.

于 2013-03-13T14:52:22.757 に答える
0

NSBezierPath または CGPath の要素を列挙し、それぞれに対して何かを行うことができます。

NSBezierPath には、、、およびループを使用elementCountelementAtIndex:associatedPoints:ますfor。にはelementAtIndex:associatedPoints:、最大 3 つの の C 配列が必要NSPointです。

CGPath の場合は、 を使用しますCGPathApply。これは、作成した C 関数へのポインターを取ります。関数の 2 つの引数の 1 つは、 によって返される情報と同じ情報を含む構造体elementAtIndex:associatedPoints:です。ただし、ポイントの配列が作成されます。

要素のタイプは、それらの間でほとんど同じです。

  • A movetoorlinetoは1点を運ぶ。

    linetoなぜ aに 2 つの点がないのか不思議に思うかもしれません。要素に関連付けられたポイントは、目的のポイント ( to in ) でlinetoあり、直後の新しい現在のポイントです。もう 1 つのポイント、つまりあなたが由来するポイントは暗黙的です。使用したい場合は、最後の現在のポイントを覚えておく必要があります。

  • A (立方体)curvetoは 3 つの点すべてを使用します。

    と同様にlineto、ソース ポイントは暗黙的であり、単に最後の現在のポイントです。配列の最後のポイントは、宛先アンカー ポイントです。他の 2 つのポイントはコントロール ポイントです。

  • Core Graphics にはcurveto、2 つの点しかない 2 次要素があります。

    立方体curvetoには 2 つのコントロール ポイントと 1 つのアンカー ポイントがあります。二次曲線には、制御点が 1 つとアンカー ポイントが 1 つしかありません。

    curvetoNSBezierPath には 2 次要素がありません。NSBezierPath のすべてのcurveto要素は立方体です。

  • Aclosepathにはポイントがありません。前回のポイントに戻りますmoveto

いずれにせよ、要素ごとに、必要なアンカー ポイント インジケーターを描画します。たとえば、目的のポイントに青い円を描画し、 a には何も描画しないことがclosepathできます (一致する に遭遇したときに既に描画しているためmoveto)。要素の場合curveto、2 つの制御点のそれぞれにインジケーターを描画することもできます。

于 2013-02-10T01:31:55.783 に答える