2009-05-15 21 views
6

iPhoneで次のように実装する方法はありますか?私たちは米国の地図を持っています。色は異なる地域(気候地域、私は信じています)を持っています。それらは長方形ではなく、州または郵便番号または郡または他の定義された行に従わない。だから、私たちの地域は非常に丸く、必ずしも連続していなくてもいません。iPhone、マップ、クリック可能な非長方形の領域

私はユーザーに自分の地域をクリックする機能を提供したいと思っていました。私は彼らがどこの地域に触れたのかを知ることができましたが、私の人生では、多くの多くの長方形カーブに最も適している、私はこれを行う方法を理解することはできません。

アイデア?

EDIT:領域がハードこのようにすることができ...これらの領域が定義されていますどのようにlink text

+2

マップが色分けされている場合、ユーザーがどこかをクリックして、選択したピクセルを見てみましょう。 –

+0

Uh。ああ。奇妙な嘘つき。私はそれを調べます。 –

+0

Nikhil - 2もの。まず、あなたのコメントを答えにして、私はそれを受け入れます。しかし、第二に、iPhone SDKからどのような色が触れられたのかを知るためのコードを知っていますか? –

答えて

10

?あなたはポイントデータを取得することができた場合は、使用してCGPathにを作成します。

CGPathRef path = CGPathCreateMutable(); 
CGPathMoveToPoint(path,null,xpoints[0],ypoints[0]) 
for (int i = 1; i < numpoints; ++i) { 
    CGPathAddLineToPoint(path,null,xpoints[i],ypoints[i]); 
} 
CGPathCloseSubpath(path); 

そして、いつでもユーザーのタッチは、各地域のために、それはタッチポイント含まれているかどうかをチェックします。

if (CGPathContainsPoint(path,null,touchPoint,false)) ... 

とそうでありませんのあなたは、地域で行われているときに解放することを忘れて:あなたは1 CGPathRefにいくつかの別々のサブパスを作成することができますし、containmenをチェックするとき、それはすべてのサブパスをチェックします

CGPathRelease(path); 

注意t。

もしあなたがしたいのであれば、円弧または曲線を使って線を右に出そうとすることができますが、これはあまりよく知られていません。

+0

素晴らしいアイデア。私はそれを取り除くことができるかどうか分からない(サンプルマップにリンクするために質問を編集した)。そのようなパスを作成するか、少なくともそれらを近似するのは少し難しいかもしれません。 –

+0

画像を見た後、私はちょうど興味があります、大きさに関する限りその画像はいかに正確ですか?あなたは約44x44ピクセルよりも小さすぎる領域を持つことを望まないでしょう。さもなければ、ユーザーはそれをクリックすることができません。しかし、Nikhilの考えはそれほど悪くはありませんでした。彼らがクリックした色を見てください。 好奇心を失っています...実際にあなたが見せている画像は1つだけですが、それ以外のデータはありませんか? –

+0

Ed:正直なところ、私たちは現在計画段階にありますので、グラフィックアーティストと一緒に作業します。実際には、巨大な地図をセクションに分割して、きれいにクリックできるようにズームを許可します。しかし、すばらしいコメント。 –

7

ヒットテストを行うには、色分けされたビットマップが必要なことがあります。

表示するビットマップは1つですが、単色でコード化された領域を持つもう1つのビットマップがあります。ユーザーが表示マップをクリックすると、ヒットテストマップにそのピクセルがどの色で表示されているかチェックし、次に適切なアクションを実行します。

+3

+1非常に古い非常にきちんとしたハットトリックの雇用のために – slf

関連する問題