跟踪UIView中的变化
我有一个子类UIView(currentMapView),它使用从XML文件中提取的一系列CGMutablePaths绘制几个状态的映射。 当用户点击某个状态时,填充颜色会从绿色变为紫色。 现在我找出使用CGPathContainsPoint轻松点击哪个状态来报告哪个path被点击,然后设置该path的填充颜色,并使用setNeedsDisplay重新加载视图。 我遇到的问题是,我需要多次重复使用currentMapView(不同的状态组),我不知道如何跟踪用户点击的path,以便在重新加载时重新着色从XML文件查看。
下面是我正在做的一步一步的例子:
-
currentMapView从XML文件加载path数据并绘制美国东部的地图。
-
用户点击佛罗里达,然后变成紫色(我使用CGContextSetFillColorWithColor设置佛罗里达path的填充颜色后,我在currentMapView上调用了“setNeedsDisplay”)
-
用户点击北卡罗来纳州,它变成紫色(我使用CGContextSetFillColorWithColor设置北卡罗莱纳州path的填充颜色后,我在currentMapView上调用setNeedsDisplay)
-
用户导航到另一个视图,我需要在currentMapView中绘制另一组状态(清除它在那里)。
一切工作正常到这里。
-
当用户返回第一步的视图,再次绘制美国东部的地图时,我需要再次在佛罗里达州和北卡罗莱纳州的path上着色。
跟踪用户碰到的path的最好方法是什么?
最简单的方法是有一个名为statesTouched
的全局NSMutableSet
variables。 将其初始化为application:didFinishLaunchingWithOptions:
的空集application:didFinishLaunchingWithOptions:
用户每次点击一个状态时,将该状态的名称(或代表该状态的对象的引用)添加到该集合中:
[statesTouched addObject:touchedStateName];
当用状态加载视图时,循环查看视图中的状态并检查每个状态是否在集合中:
for (NSString *stateName in viewStateNames) { if ([statesTouched member:stateName]) { [self setColor:[UIColor purpleColor] forStateName:stateName]; } }