2012-02-16 21 views
0

私は、XMLファイルから引き出された一連のCGMutablePathsを使用していくつかの状態のマップを描画する、サブクラス化されたUIView(currentMapView)を持っています。ユーザーが状態をタップすると、塗りつぶしの色が緑色から紫色に変わります。今、どのパスがタップされたかを報告するためにCGPathContainsPointを使用して、どの状態がオンザフライでタップされたのか把握し、そのパスの塗りつぶし色を設定し、setNeedsDisplayを使用してビューをリロードします。私が持っている問題は、currentMapViewを何度か(状態の異なるグループ)再利用する必要があるということです。ユーザーがタップしたパスを追跡する方法がわからないので、 XMLファイルからのビュー。UIViewの変更を追跡する

は、ここで私がやっているのステップバイステップの例です:

  1. currentMapViewは、XMLファイルからのパスデータをロードし、アメリカ東部のマップを描画します。

  2. ユーザーは、フロリダをタップし、それは(私が呼ん

  3. ユーザーはノースカロライナ州をタップし、それが紫色になります(私はCGContextSetFillColorWithColorを使用して、フロリダパスの塗りつぶしの色を設定した後currentMapViewの「setNeedsDisplay」と呼ぶ)、紫色になります

  4. ユーザは別のビューにナビゲートして、currentMapViewに別のグループの状態を描画する必要があります(そこに何を拭き取るか)。

    すべてここまでうまくいきます。

  5. ユーザーがステップ1からのビューに戻り、再び米国東部の地図を描画すると、再びフロリダとノースカロライナのパスで色を付ける必要があります。

ユーザーが触れたパスを把握するにはどうすればよいでしょうか?

答えて

2

最も簡単な方法は、NSMutableSetというグローバル変数をstatesTouchedという名前にすることです。それをapplication:didFinishLaunchingWithOptions:の空のセットに初期化します。

ユーザが状態をタップするたびに、セットの状態の名前(または状態を表すオブジェクトへの参照)を追加:

[statesTouched addObject:touchedStateName]; 

を使用すると、状態を有するビューをロードすると、ループ表示されている状態で、各セットがセットに含まれているかどうかを確認します。

for (NSString *stateName in viewStateNames) { 
    if ([statesTouched member:stateName]) { 
     [self setColor:[UIColor purpleColor] forStateName:stateName]; 
    } 
} 
+0

ありがとうございました!それはそれをした! – Frank

関連する問題