如何使用Objective-C在数组中存储(x,y)坐标?

时间:2010-08-27 21:11:05

标签: iphone objective-c

我有一个Objective-C方法,它使用图像中的一些x和y值:image.center.ximage.center.y。我想在每次调用此方法时将它们存储起来,所以我希望使用数组。

如何做到这一点?我怀疑使用NSMutableArray?

5 个答案:

答案 0 :(得分:12)

我建议将这些点存储在NSArray中,使用NSValue包装:

NSMutableArray *arrayOfPoints = [[NSMutableArray alloc] init];

[arrayOfPoints addObject:[NSValue valueWithCGPoint:image.center]];

// Do something with the array
[arrayOfPoints release];

这假设image.center是CGPoint结构(如果没有,你可以使用CGPointMake()创建一个)。

要提取CGPoint,只需使用

即可
[[arrayOfPoints objectAtIndex:0] CGPointValue];

答案 1 :(得分:6)

C数组是Objective C的适当子集,与使用Cocoa Foundation类相比,生成更快的代码并且通常使用更少的内存。你可以添加:

CGPoint myPoints[MAX_NUMBER_OF_POINTS];

到您的实例变量;并保存坐标:

myPoints[i] = image.center;

答案 2 :(得分:2)

正如Brad Larson指出的那样,这适用于Mac,不适用于iPhone。

是的,NSMutableArray是最佳选择。但是,数组存储对象,而center是结构!

一种解决方案是用center

包装NSValue结构
yourArray = [NSMutableArray arrayWithCapacity:2]; //Don't worry, capacity expands automatically

[yourArray addObject:[NSValue valueWithPoint:image.center]];
//later
[[yourArray objectAtIndex:whatevs] pointValue];

(这非常类似于,例如,用int包裹NSNumber以存储在数组中。)

答案 3 :(得分:2)

你有很多选择。

要记住的是x和y值将是CGFloats(而image.center是CGPoint)。这些不是对象,也不能直接添加到NSArray中。

您可以使用NSValue的valueWithPoint:和pointValue方法。如果要单独保存它们,可以通过[NSNumber numberWithFloat:x];来使用NSNumber。或者,如果需要,可以使用C数组。

答案 4 :(得分:1)

你是正确的,要修改数组,你必须有一个NSMutableArray类型。

使用它也不是非常困难:

NSMutableArray* array = [NSMutableArray arrayWithCapacity:3];
[array addObject:firstObject];
[array addObject:secondObject];
[array addObject:thirdObject];