2012-02-16 93 views
0

我有一個子類UIView(currentMapView),它使用從XML文件中提取的一系列CGMutablePaths繪製幾個狀態的映射。當用戶點擊某個狀態時,填充顏色會從綠色變爲紫色。現在我找出使用CGPathContainsPoint輕鬆點擊哪個狀態來報告哪個路徑被點擊,然後設置該路徑的填充顏色並使用setNeedsDisplay重新加載視圖。我遇到的問題是我需要多次重複使用currentMapView(不同的狀態組),我不知道如何跟蹤用戶點擊哪些路徑​​,以便在重新加載時可以重新着色它們。從XML文件查看。保持跟蹤UIView中的變化

這裏的一步步例子我在做什麼:

  1. currentMapView從XML文件加載路徑數據,並繪製地圖美國東部的。

  2. 用戶水龍頭佛羅里達州,它變成紫色(我稱之爲「setNeedsDisplay」上currentMapView設置使用CGContextSetFillColorWithColor佛羅里達路徑的填充顏色後)

  3. 用戶水龍頭北卡羅萊納州,它變成紫色(我稱之爲在currentMapView「setNeedsDisplay」設置使用CGContextSetFillColorWithColor北卡羅萊納州路)

  4. 用戶導航到另外的看法,我需要繪製currentMapView另一組狀態的填充顏色後(消滅它那裏)。

    一切工作正常到這裏。

  5. 當用戶從第一步返回到視圖並再次繪製美國東部地圖時,我需要再次在佛羅里達和北卡羅萊納州路徑上着色。

跟蹤用戶碰到的路徑的最好方法是什麼?

回答

2

最簡單的方法是擁有一個名爲statesTouched的全局變量NSMutableSet。將其初始化爲application:didFinishLaunchingWithOptions:中的空集。

每個用戶輕敲的狀態時,狀態的名稱(或對錶示狀態的對象的引用)添加到該集合:

[statesTouched addObject:touchedStateName]; 

當加載用狀態下的視圖,環在視圖中檢查各個狀態並檢查是否各自處於該集合中:

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

謝謝!那樣做了! – Frank 2012-02-16 20:21:17