我有一个子类UIView(currentMapView),它使用从XML文件中提取的一系列CGMutablePaths绘制几个状态的映射。当用户点击状态时,填充颜色从绿色变为紫色。现在,我想出了使用CGPathContainsPoint动态点击哪个状态来报告回过来的路径,然后我设置该路径的填充颜色并使用setNeedsDisplay重新加载视图。我遇到的问题是我需要多次重复使用currentMapView(不同的状态组),我不知道应该如何跟踪用户点击的路径,这样当我重新加载时我可以再次对它们进行着色从XML文件中查看。
这是我正在做的一步一步的例子:
currentMapView从XML文件加载路径数据并绘制美国东部地图。
用户点击佛罗里达,它变成紫色(我在使用CGContextSetFillColorWithColor设置佛罗里达路径的填充颜色后在currentMapView上调用'setNeedsDisplay')
用户点击North Carolina,它变成紫色(我在使用CGContextSetFillColorWithColor设置North Carolina路径的填充颜色后在currentMapView上调用'setNeedsDisplay')
用户导航到另一个视图,我需要在currentMapView中绘制另一组状态(消除其中的状态)。
到目前为止一切正常。
当用户从第一步返回视图并再次绘制美国东部地图时,我需要再次在佛罗里达州和北卡罗莱纳州的路径上进行着色。
跟踪用户触摸的路径的最佳方法是什么?
答案 0 :(得分:2)
最简单的方法是使用名为NSMutableSet
的全局statesTouched
变量。将其初始化为application:didFinishLaunchingWithOptions:
中的空集。
每次用户点击状态时,将状态名称(或对表示状态的对象的引用)添加到集合中:
[statesTouched addObject:touchedStateName];
使用状态加载视图时,循环遍历视图中的状态并检查每个状态是否在集合中:
for (NSString *stateName in viewStateNames) {
if ([statesTouched member:stateName]) {
[self setColor:[UIColor purpleColor] forStateName:stateName];
}
}