我正在创建一个包含地图的程序,以便检查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中。
答案 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具有确定路径中是否包含点以及是否能够绘制路径的方法。