CGPoints,NSValues,NSMutableArray和ID类型

时间:2012-07-30 10:58:06

标签: iphone objective-c ios nsmutablearray core-graphics

我正在尝试在数组中存储来自UITouches的CGPoints。从阅读其他线程我已经意识到使用NSValue似乎是最好的方法。 目前我有:

NSMutableArray *dotsArray;
NSValue *pointObj;
UITouch *touch = obj;
CGPoint touchPoint = [touch locationInView:self.view];
// Need to store the CGPoints, can't store directly into an array // as it is a C struct           // so we use NSValue
// CGPoint converted to NSValue
CGPoint point = touchPoint;
pointObj = [NSValue valueWithCGPoint:point];
dotsArray = [NSArray arrayWithObjects:pointObj,nil];
// Print to console the objects in the collection
NSLog(@"array content: %@", dotsArray);
NSLog(@"[dotsArray count] = %i",[dotsArray count]);
// Restore from NSValue to C structures
CGPoint pointRestored = [pointObj CGPointValue];

我希望能够使用:

[dotsArray insertObject:pointObj atIndex:0]; 

取代

dotsArray = [NSArray arrayWithObjects:pointObj,nil]; 

这样我可以增加位置,因为我记得存储多个点的方法。

从阅读开始,我认为这与'insertObject'所需的ID类型有关,但我并不完全理解它,也无法在线找到解决方案。

编辑:当我使用

[dotsArray insertObject:pointObj atIndex:0];

然后

NSLog(@"array content: %@", dotsArray);

输出NULL

2 个答案:

答案 0 :(得分:0)

您要使用的方法[dotsArray insertObject:pointObj atIndex:0];是指数组ID的数组位置。这意味着atIndex:0是数组中的第一个位置,因为数组从Zeroth位置开始。所以现在如果你把它放在你的 DotsArray 中,你想要调用的索引或ID类型就是你要显示的点的值。

答案 1 :(得分:0)

使用addObject:方法。

[dotsArray addObject:pointObj];

我认为这会对你有所帮助。