Iphone 如何使用Objective-C在数组中存储(x,y)坐标?
我有一个Objective-C方法,它使用图像中的一些x和y值:Iphone 如何使用Objective-C在数组中存储(x,y)坐标?,iphone,objective-c,Iphone,Objective C,我有一个Objective-C方法,它使用图像中的一些x和y值:image.center.x和image.center.y。每次调用此方法时,我都要将它们存储起来,所以我希望使用数组 如何做到这一点?我怀疑使用了NSMutableArray?您是正确的,因为要修改数组,您必须具有NSMutableArray类型 使用一个也不是非常困难: NSMutableArray* array = [NSMutableArray arrayWithCapacity:3]; [array addObject:f
image.center.x
和image.center.y
。每次调用此方法时,我都要将它们存储起来,所以我希望使用数组
如何做到这一点?我怀疑使用了NSMutableArray?您是正确的,因为要修改数组,您必须具有NSMutableArray类型 使用一个也不是非常困难:
NSMutableArray* array = [NSMutableArray arrayWithCapacity:3];
[array addObject:firstObject];
[array addObject:secondObject];
[array addObject:thirdObject];
正如布拉德·拉森(Brad Larson)所指出的,这是为Mac电脑设计的,不是为iPhone设计的。 是的,
NSMutableArray
是最佳选择。但是,数组存储对象,而中心是一个结构
一种解决方案是用NSValue
包装center
结构:
yourArray = [NSMutableArray arrayWithCapacity:2]; //Don't worry, capacity expands automatically
[yourArray addObject:[NSValue valueWithPoint:image.center]];
//later
[[yourArray objectAtIndex:whatevs] pointValue];
(例如,这非常类似于用
NSNumber
包装int
以存储在数组中。)您有许多选项可以执行此操作
要记住的是,x和y值将是cgfloat(而image.center是CGPoint)。这些不是对象,不能直接添加到NSArray
您可以使用NSValue的valueWithPoint:和pointValue方法。如果要单独保存它们,可以通过执行[NSNumber numberWithFloat:x];,使用NSNumber;。或者,如果需要,可以使用C数组。我建议将点存储在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];
C数组是目标C的一个适当子集,并且产生的代码比使用COCKFoundation类更快,并且使用更少的内存。你可以加上:
CGPoint myPoints[MAX_NUMBER_OF_POINTS];
到您的实例变量;并将坐标保存到:
myPoints[i] = image.center;
请注意,
+valueWithPoint:
和-pointValue
在iPhone上不存在,仅在Mac上存在。你可以在iPhone上使用+valueWithCGPoint:
和-CGPointValue
(从标签判断,他感兴趣的是什么),正如我在回答中所描述的。谢谢你;我不是iPhone er。+1如果你使用了很多积分,这可能是最好的方法,因为你不会无意中听到创建成吨的NSValue
对象。谢谢大家。当然有很多选择。感谢您的帮助和代码解释!