2

都市を表す円と正方形がたくさんある静的な地図画像があります。scrollView の下にサブクラス化された imageView に画像を読み込んで、ユーザーのタッチをキャプチャし、マップ全体でズーム/スクロールできるようにしました。私の課題は、ユーザーが都市のこれらの円/正方形のいずれかに触れるたびにラベルをポップアップして、それがどの都市であるかを伝え、都市の詳細ビューをロードすることです。「touchesBegan」イベント中にそれらを参照できるように、imageView マップに基づいて都市のすべての相対 CGPoints を辞書にプリロードできると考えましたが、すぐに頭を悩ませて、おそらくこれについて行っています間違った道。

これまでのところすべてが機能しており、タッチの CGPoint の x 座標と y 座標をキャプチャできます。私が抱えている最大の問題は、辞書にあるかもしれない離散点にユーザーが触れているかどうかを判断することです。つまり、辞書に「Boston = NSPoint: {235, 118};」が含まれている場合 ユーザーが正確になるまでタッチを繰り返さなくても、ユーザーがそのポイントに近づいたことをどのように知ることができますか? ユーザーのタッチが既存のポイントに「近い」かどうかを判断する簡単な方法はありますか? 私はこれを正しい方法で行っていますか?

頭の後ろでのアドバイスや平手打ちは大歓迎です。

ありがとう、マイク

4

3 に答える 3

0

UIButtonを使用して都市を表すことができます。そうすれば、より少ない労力で標準的なタッチ、ハイライトなどの動作を得ることができます。マップにサブビューとしてボタンを追加すると、ボタンはマップに沿って拡大縮小およびスクロールされます。

于 2009-08-02T19:54:45.307 に答える
0

R-Treeを使用するか、現在のビューで表示されている各ポイントへのタッチの近さを計算できます。近接度を計算するには、通常はピタゴラスの定理を使用しますが、この場合は相対サイズのみを比較しているため、平方根をスキップできます。また、50 ピクセルを 2500 に二乗したい場合は、距離のカットオフを宣言することもできます。したがって、結果を距離と基準点を含むオブジェクトに入れ、そのオブジェクトを NSMutableArray に入れます。結果をカットオフの下に追加するのではなく、最小の結果を選択します。

したがって、接触したポイントがある場合pT、各ポイントpNについて、次のように計算します。

d=(pT.x-pN.x)*(pT.x-pN.x) + (pT.y-pN.y)*(pT.y-pN.y); //d is the squared distance

pN最小の点dは、 に最も近かった点ですpT。前述のように、10 ピクセル以内のタッチのみをカウントする場合は、それをテストできますd <= 10*10

20x20 の正方形領域内のタッチをテストする方法も機能しますが、2 つの点が互いに 20 ピクセル以内にある場合を除いて、どちらが最も近いタッチ点であるかを知る必要があります。

于 2009-08-02T18:31:00.220 に答える
0

私がそれを正しく理解していれば、ユーザーがタップしたポイントが都市としてマークされているポイントに十分「近い」かどうかを知りたいです。

近くを定量化する必要があります。つまり、しきい値を設定すると、タップが遠くなり、前にタップが近づきます。

それを行ったら、配列内の各要素のデカルト座標距離 sqrt ((x1-x2)^2 + (y1-y2)^2) を計算します (都市の x、y 値を含む辞書を読み取ります)。結果をに格納します。別の配列。次に、結果の最小値を取ります。その結果のインデックスは、上記のしきい値よりも小さい場合、タップに最も近い都市です。

于 2009-08-03T03:03:36.257 に答える