在循环中创建多个CGPath

时间:2013-11-19 19:46:13

标签: objective-c arrays loops nsdictionary cgpath

我正在创建一个包含地图的程序,以便检查mouseDown正在哪个区域发生我想为每个区域创建一个CGPath。目前我创建了这个部分:

int brestPoints[] = {755,751,684,765,655,851,586,905,607,940,718,898,716,954,741,960,743,938,775,925,761,872,767,815};

brest = CGPathCreateMutable();

for (int i = 0; i < sizeof(brestPoints); i=i+2) {
    if (i == 0) {
        CGPathMoveToPoint(brest, NULL, brestPoints[i], 2203-brestPoints[i+1]);
    } else {
        CGPathAddLineToPoint(brest, NULL, brestPoints[i], 2203-brestPoints[i+1]);
    }
}

CGPathCloseSubpath(brest);

我的问题是我要创建75个CGPath,并且我想循环遍历多个数组以一次创建它们。

对我来说,理想的解决方案是拥有一个包含对象数组和键区域名称的字典。但我不能把数组作为对象,因为它只能存储对象。 重写所有75组坐标以仅包含NSNumber将是非常挑剔的。

有什么想法吗?

更新

我认为可能存在关于我正在尝试做什么的混乱,我有75个这样的C数组:

int brestPoints[] = {755,751,684,765,655,851,586,905,607,940,718,898,716,954,741,960,743,938,775,925,761,872,767,815};
int picardyPoints[] = {769, 884, 778, 919, 859, 959, 956, 894, 949, 864, 864, 899, 842, 889};

我需要一些方法为每个数组创建(简单地)一个NSBezierPath或CGPath。并且仍然知道哪个路径属于哪个数组(每个数组对应于我的地图的一个区域)。

所以我将所有数组放入一个NSDictionary,它将一个与区域名称相关联的数组作为键。这样我就可以遍历字典来创建我的所有路径,并且仍然可以了解它们所属的区域。但我似乎找到了一种方法,因为C数组可以放在NSDictionary中。

2 个答案:

答案 0 :(得分:2)

我要做什么:将C数组放入C数组(如果它们还没有)。将路径放入具有相同顺序的CFArray中。然后你可以匹配指数。

答案 1 :(得分:-1)

由于您在文本编辑器中手动创建了int数组,因此您可以使用find / replace将它们格式化为NSDictionary文本和NSNrray的NSNumber值。

NSDictionary * regionPoints = { @"brest" : @[ @(1), @(2) ], 
                                @"picardy" : @[ @(1), @(2) ]};

现在,您可以为UIKit(iOS)构建UIBezierPath,或者为AppKit(OSX)而不是NSBezierPath对象构建CGPath。将NSBezierPath添加为字典中的值。构造完成后,您不再需要访问int数组,因为NSBezierPath具有确定路径中是​​否包含点以及是否能够绘制路径的方法。