1

私はiOS5iPhoneプロジェクトに取り組んでおり、ユーザーはデバイスで画像を選択し、画像内のオブジェクトをトレースして(フルーツバスケットの画像からリンゴをトレース)、画像をアップロードする必要があります。後でプルダウンできるように「タグ付けされた」オブジェクト。次に、他の人が画像をプルダウンして、タグ付けされたオブジェクトが画像内のどこにあるかを見つけようとします(「Where'sWaldo?」と考えてください)。

私はオブジェクトをトレースする最良の方法を見つけようとしてきました。以前は、ユーザーにオブジェクトの周りの左上、右上、左下、右下のポイントを押して、オブジェクトの周りに正方形のビューを作成してもらいました。そのビューの情報がアップロードされ、ユーザーがオブジェクトを見つけるためにプルダウンされました。欠点は、すべてのオブジェクトが明らかに正方形/長方形ではないため、自由形式の形状を作成する必要があることです。

ユーザーがオブジェクトを描画できるようにすることを考えていたので、どういうわけか、トレースの内側(たとえば、トレースした円の内側)を特定できるようにする必要がありますが、私が予測する問題は、彼らが作ったトレースは閉じているので、私は形を埋めることができます(これは全体的に問題ではありません)。

これを開始する最良の方法についてのアドバイスを歓迎します。

ありがとう!

4

1 に答える 1

2

UIBezierPathは、こ​​こで非常に便利な友達になる可能性があります。必要な形状を作成でき、描画とヒット検出の両方をサポートします。私は最近、指で形をなぞってフリーズし、その形をタップ検出に使用できるストーリーブックの実装を行いました。

基本的な考え方は次のとおりです。

指が画面に触れたら、位置の記録を開始します。前の位置に近すぎる位置はすべて破棄します (たとえば、最後に記録されたポイントからの距離が最小の場合にのみポイントを記録します)。これを行っている間、UIBezierPath を描画して、何をトレースしているかを確認できます。毎回再作成するのではなく、ポイントを追加して UIBezierPath を変更します。* 指を離したら、ベジェ パスを閉じます。とてもシンプルです。

これで、多角形 (つまり、直線のエッジ) が作成されます。あなたの最小距離が十分に低い場合、またはヒット検出に使用している場合(あなたが言うように)、それは実際には問題になりません。ただし、パスを滑らかにしたい場合は、curve-to メソッドを使用する必要があり、少し複雑になりますが、これについてさらにフォローアップしたい場合は、スプラインとポイント シリーズからのスプライン生成についてお読みください。

*注: そうしないと、大きな図形を描画するときに遅延が発生します。これは、ますます大きくなる一連のポイントからベジェ パスを再作成するとコストがかかるためです。既存のパスを変更すると、はるかに高速になります。

于 2012-06-08T15:56:39.877 に答える