Использование CGPoints в NSArray - PullRequest
4 голосов
/ 04 июня 2010

Я пытался создать массив с указанием местоположения 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, чтобы их можно было использовать в массиве Есть ли простой способ сделать это внутри массива?

Ответы [ 4 ]

11 голосов
/ 04 июня 2010

Чтобы преобразовать значения с плавающей точкой в ​​объекты, используйте NSNumber. NSValue имеет оболочки для геометрических типов, таких как CGPoint. Любой из них будет работать для вас.

[NSValue valueWithCGPoint:player.center];

[NSNumber numberWithFloat:player.center.x];
[NSNumber numberWithFloat:player.center.y];
7 голосов
/ 04 июня 2010

к дополнению за первый ответ. Когда вам нужно прочитать CGPoint обратно из вашего массива, вы можете использовать что-то вроде этого:

CGPoint point = [(NSValue *)[pointsArray objectAtIndex:i] CGPointValue];
0 голосов
/ 04 июня 2010

Это должен быть NSArray? Почему бы не использовать массив структур?

typedef struct {
    CGPoint location;
    CGFloat height;
} PlayerLocation;

PlayerLocation players[3];

players[0].location = player.center;
players[0].height   = playerheight;

Или, в зависимости от вашего дизайна, может иметь смысл объявить классjective-C, содержащий координаты x, y, z как ivars, и сохранить эти объекты в NSArray.

@interface PlayerLocation : NSObject {
  CGPoint location;
  CGFloat height;
}
@end
0 голосов
/ 04 июня 2010

Также обратите внимание, что для NSArray нет метода addObject (вы не можете добавлять объекты в NSArray после его создания); Вы хотите NSMutableArray.

Вместо:

NSArray *location[3];

Вы, вероятно, хотите что-то более похожее:

NSMutableArray *location = [NSMutableArray arrayWithCapacity:3];
...