【问题标题】:Keeping track of changes in a UIView跟踪 UIView 中的更改
【发布时间】:2012-02-16 19:54:09
【问题描述】:

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

这是我正在做的逐步示例:

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

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

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

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

    到目前为止一切正常。

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

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

【问题讨论】:

    标签: objective-c ios core-graphics


    【解决方案1】:

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

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

    [statesTouched addObject:touchedStateName];
    

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-02
      相关资源
      最近更新 更多