2016-05-08 8 views
0

私はdrawRectとNSBezierPathを使って単純な図形を描く方法を見てきましたが、複雑な円を描く必要があります。だから、私はattributedstringと文字列のいくつかの範囲が異なる色を持っています。私は文字列の長さを持つ円を作成する必要があり、文字列の異なる範囲は矢印としてマークする必要があります、下の例を参照してください。サークルのすべての部分を文字列に比例させるには、文字列と範囲の長さを使用できます。しかし、どのようにして円の異なる部分を描くことができますか?各セグメントまたは複数のサブパスを使用することにより?複雑な円を迅速に描くには?

更新 新しいマーク地域を追加したり、マーク地域を削除して、クリックすることででき、この図は、変更AttributedStringのを表している必要がありますつまり、ユーザーが領域の色を変更することができ、マーク領域の長さ、文字列の長さボタンは、文字列のグラフィック表現を取得する必要があります。私はアトリビュートストリングにRangesの配列を使用することを考えていましたが、forループではこれらのRangesを1つずつ使用してアークを矢頭の有無に合わせてリング全体に塗りつぶす必要がありました。描画円弧を1つずつ使用して、色と厚さの異なるセグメントを持つ円を得ることができます。今問題は、アークに矢印の頭を追加する方法ですか?出来ますか ?

​​

答えて

1

まず、ちょうど丸ごと、簡単なパスを描画します。次に、最初の矢印のやや複雑なパスを描き、赤で塗りつぶします。その後、2番目の矢印のパスを描き、黒で塗りつぶします。これは非常にシンプルなはずですが、唯一の方法は、パスのコントロールポイントを計算するために数学(つまり、三角法)を正しく実行することです。このようなことがたくさんある場合は、図面からコードを生成するMacintoshアプリケーションPaintCodeを購入することを検討してください。ここで

は(いくつかのいくつかの曲線の矢印のコードを含めるために起こる)のチュートリアルです:

https://www.raywenderlich.com/38918/paintcode-tutorial-bezier-paths

+0

を説明いただきありがとうございます。 PaintCodeが私に適しているかどうかはわかりません。実際には、数字は変化する属性のストリングを表す必要があります。つまり、ユーザーはリージョンの色、長さ、ストリングの長さを変更できます。ボタンをクリックすると、ストリングのグラフィック表現が得られます。私はマークされた部分文字列の範囲を使用することを考えていました。forループでは、これらの範囲を1つずつ使用して、アークを矢頭で描いてリング全体を埋める必要があります。 – VYT

+1

'func appendBezierPathWithArcWithCenter(_センター:NSPoint、半径半径:CGFloat、startAngle startAngle:CGFloat、endAngle endAngle:CGFloat)は、見上げる価値のある関数です。範囲、要素の総数、文字列内の位置を指定すると、円の一部を描画することができます。私は別の色にするために別々のパスを作成する必要があると思います。 – Mrwerdo

+0

@Mrwerdoありがとう!私はちょうどこの方法で試していました(質問の更新を見てください)。今、問題はいくつかのアークに矢印の頭を追加する方法ですか? – VYT