2012-02-16 67 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