跟踪UIView的变化

时间:2012-02-16 19:54:10

标签: objective-c ios core-graphics

我有一个子类UIView(currentMapView),它使用从XML文件中提取的一系列CGMutablePaths绘制几个状态的映射。当用户点击状态时,填充颜色从绿色变为紫色。现在,我想出了使用CGPathContainsPoint动态点击哪个状态来报告回过来的路径,然后我设置该路径的填充颜色并使用setNeedsDisplay重新加载视图。我遇到的问题是我需要多次重复使用currentMapView(不同的状态组),我不知道应该如何跟踪用户点击的路径,这样当我重新加载时我可以再次对它们进行着色从XML文件中查看。

这是我正在做的一步一步的例子:

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

  2. 用户点击佛罗里达,它变成紫色(我在使用CGContextSetFillColorWithColor设置佛罗里达路径的填充颜色后在currentMapView上调用'setNeedsDisplay')

  3. 用户点击North Carolina,它变成紫色(我在使用CGContextSetFillColorWithColor设置North Carolina路径的填充颜色后在currentMapView上调用'setNeedsDisplay')

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

    到目前为止一切正常。

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

  6. 跟踪用户触摸的路径的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

最简单的方法是使用名为NSMutableSet的全局statesTouched变量。将其初始化为application:didFinishLaunchingWithOptions:中的空集。

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

[statesTouched addObject:touchedStateName];

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

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