【问题标题】:Using CGPoints in an NSArray在 NSArray 中使用 CGPoints
【发布时间】:2010-06-04 00:11:28
【问题描述】:
我一直在尝试创建一个数组来说明 UIImageView 在我一直在开发的应用程序中的位置。我想要做的是通过使用一个数组,我可以使用它的 x、y 和 z 坐标来存储我的“玩家”图像的位置。我要完成的脚本看起来像
NSArray *location[3];
-(IBAction)startup;{
[location addObject: player.center.x];
[location addObject: player.center.y];
[location addObject: playerheight];
}
所以我将能够访问此数组以在屏幕上以“3 维”移动我的“玩家”,但我不知道如何将 CGpoint 值转换为 NSValues 以便它们可以在数组中使用,有没有一种简单的方法可以在数组内部做到这一点?
【问题讨论】:
标签:
cocoa-touch
nsarray
cgpoint
【解决方案1】:
要将浮点值转换为对象,请使用 NSNumber。 NSValue 有 CGPoint 等几何类型的包装器。两者都适合你。
[NSValue valueWithCGPoint:player.center];
[NSNumber numberWithFloat:player.center.x];
[NSNumber numberWithFloat:player.center.y];
【解决方案2】:
第一个答案的补充。
当您需要从数组中读取 CGPoint 时,您可以使用类似的东西:
CGPoint point = [(NSValue *)[pointsArray objectAtIndex:i] CGPointValue];
【解决方案3】:
另请注意,NSArray 没有 addObject 方法(创建后不能将对象添加到 NSArray);你想要NSMutableArray。
代替:
NSArray *location[3];
你可能想要更多类似的东西:
NSMutableArray *location = [NSMutableArray arrayWithCapacity:3];
【解决方案4】:
它必须是 NSArray 吗?为什么不使用结构数组?
typedef struct {
CGPoint location;
CGFloat height;
} PlayerLocation;
PlayerLocation players[3];
players[0].location = player.center;
players[0].height = playerheight;
或者根据您的设计,将包含 x、y、z 坐标的 Objective-C 类声明为 ivars 并将这些对象存储到 NSArray 中可能更有意义。
@interface PlayerLocation : NSObject {
CGPoint location;
CGFloat height;
}
@end