1

我构造了一个 CG Point 数组,如下所示:

NSMutableArray *_startPositions = [NSMutableArray array];
[_startPositions addObject:[NSValue valueWithCGPoint:CGPointMake(0.0, 0.0)]];
[_startPositions addObject:[NSValue valueWithCGPoint:CGPointMake(0.0, 0.0)]];

如何最有效地更改数组中点的 x 和 y 值?

如果我使用以下方法检索值:

CGPoint myPoint0 = [[_startPositions objectAtIndex:0] CGPointValue];

我拿回了这一点的副本。如何更改数组中 CGPoints 的 x 和 y 值?我可以在任何位置删除 CGPoint 并用正确的 x,y 值替换它,但是有没有更有效的方法?

4

4 回答 4

0

从文档:

NSValue对象总是不可变的。

因此,您在这里唯一的选择是创建一个新的以在值更改NSValue时替换旧的。CGPoint如果您正在寻找一种更有效的方法来存储 的数组CGPoints,那么 C 数组是最简单、最快的方法。

于 2012-12-21T09:02:42.280 回答
0

使用 C 数组而不是 NSMutableArray。如果需要,请使用 C++ STL 集合类,例如 std::vector 或其他 C/C++ 集合库。这样,您可以在不调用任何 Obj-C 方法的情况下操作数组内容。

于 2012-12-21T05:12:10.940 回答
0

我建议您创建自己的课程

。H

@interface MyPoint : NSObject {
    CGPoint point;
}
@property (nonatomic,assign) CGPoint point;
@end

.m

@implementation MyPoint
@synthesize point;
@end

然后将您的MyPoint对象添加到您的数组中。
改变它喜欢

MyPoint *myPoint = [_startPositions objectAtIndex:0];
myPoint.point = myPoint0;
于 2012-12-21T05:33:51.543 回答
0

如果您只更改 CGPoint 的 'x' 或 'y' 值point,则可以这样做:

((CGPoint *)&point)->x += dx;

或者

((CGPoint *)&point)->y += dy;

于 2020-01-11T04:57:49.630 回答