1

この画像から一部の領域を選択し、選択した領域の色を変更できるようにしたいと考えています。

ここに画像の説明を入力

これを行うには、CALayerandを使用することを考えUIBezierPathました。

  • 画像から色付きの領域をクリアしてから、各領域のポイントを取りUIBezierPath、画像の下に を描きました。
  • CALayer各エリアに3 つの s があり、それぞれCALayerUIBezierPath定義済みのポイントがあります。

ここに画像の説明を入力

ユーザーがレイヤーをクリックすると、 を塗りつぶさずに選択したレイヤーが表示され、UIBezierPathの周りに境界線が表示されUIBezierPath、結果は次のようになります。

ここに画像の説明を入力

  • UIView画像の上にa を追加し、その上のOpacity = 0.6fすべてのCALayers を再描画しました。
  • すべてのレイヤーが新しいUIView

次のステップは、選択した領域をマージすることです。

  • 最初のエリアのポイントを取得して、2 番目のエリアのポイントに追加しました
  • UIBezierPath新しいポイントで新しいを作成しました

私の問題は、結果が間違っていることです:

ここに画像の説明を入力


  1. UIBezierPathを正しいポイント順序とマージする方法は?
  2. を使用せずにこのようなことを達成するためのより良い方法はありUIBezierPathますか?
4

1 に答える 1

1

上の画像を見ると、ポイントのシーケンスがたどられていないため、パスが間違っています。これにより、パスがかなり台無しになります。長方形またはポイントツーポイント接続があるため、ベジェパスはそもそもこれを行うための適切なツールではないと思います。つまり、ベジェパスオブジェクトよりもポリゴンの方が多くなります。ただし、UIKitはこれらすべてをUIBezierPathオブジェクトにバンドルしているようです(私に言わせれば、最適な命名ではありません)。

ここで注意が必要なのは、2つの形状が実際に接触している場所を見つけて、前と同じようにシーケンスにポイントを追加しますが、中央の垂直線を引き裂いて、パスを他の構造に接続することです。

もう1つの方法は、ビットマップを使用し、ビットマップを単純に結合して新しい形状を作成することです。これは、基本データがどのように表現および管理されているかに大きく依存します。また、2つの形状を保持し、それらをメタオブジェクトに結合して、同時に描画することもできます。

于 2012-09-20T12:44:08.477 に答える