跟踪UIView中的变化

我有一个子类UIView(currentMapView),它使用从XML文件中提取的一系列CGMutablePaths绘制几个状态的映射。 当用户点击某个状态时,填充颜色会从绿色变为紫色。 现在我找出使用CGPathContainsPoint轻松点击哪个状态来报告哪个path被点击,然后设置该path的填充颜色,并使用setNeedsDisplay重新加载视图。 我遇到的问题是,我需要多次重复使用currentMapView(不同的状态组),我不知道如何跟踪用户点击的path,以便在重新加载时重新着色从XML文件查看。

下面是我正在做的一步一步的例子:

  1. currentMapView从XML文件加载path数据并绘制美国东部的地图。

  2. 用户点击佛罗里达,然后变成紫色(我使用CGContextSetFillColorWithColor设置佛罗里达path的填充颜色后,我在currentMapView上调用了“setNeedsDisplay”)

  3. 用户点击北卡罗来纳州,它变成紫色(我使用CGContextSetFillColorWithColor设置北卡罗莱纳州path的填充颜色后,我在currentMapView上调用setNeedsDisplay)

  4. 用户导航到另一个视图,我需要在currentMapView中绘制另一组状态(清除它在那里)。

    一切工作正常到这里。

  5. 当用户返回第一步的视图,再次绘制美国东部的地图时,我需要再次在佛罗里达州和北卡罗莱纳州的path上着色。

跟踪用户碰到的path的最好方法是什么?

最简单的方法是有一个名为statesTouched的全局NSMutableSetvariables。 将其初始化为application:didFinishLaunchingWithOptions:的空集application:didFinishLaunchingWithOptions:

用户每次点击一个状态时,将该状态的名称(或代表该状态的对象的引用)添加到该集合中:

 [statesTouched addObject:touchedStateName]; 

当用状态加载视图时,循环查看视图中的状态并检查每个状态是否在集合中:

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