2010-06-04 4 views
4

J'ai essayé de créer un tableau indiquant l'emplacement d'un UIImageView dans une application sur laquelle je travaillais. Ce que j'essaie de faire est d'utiliser un tableau que je peux stocker l'emplacement de mon image "joueur" en utilisant ses coordonnées x, y et z. Le script que je suis en train d'accomplir ressembleraitUtilisation de CGPoints dans un NSArray

NSArray *location[3]; 
-(IBAction)startup;{ 
[location addObject: player.center.x]; 
[location addObject: player.center.y]; 
[location addObject: playerheight]; 
} 

donc je serai en mesure d'accéder à ce tableau pour déplacer mon « lecteur » à l'écran dans « 3 dimensions », mais je ne sais pas comment convertir les valeurs CGpoint en NSValues ​​afin qu'ils puissent être utilisés dans le tableau, est-il un moyen simple de le faire à l'intérieur du tableau?

Répondre

11

Pour convertir des valeurs à virgule flottante en objets, utilisez NSNumber. NSValue a des wrappers pour les types géométriques comme CGPoint. L'un ou l'autre travaillerait pour vous.

[NSValue valueWithCGPoint:player.center]; 

[NSNumber numberWithFloat:player.center.x]; 
[NSNumber numberWithFloat:player.center.y]; 
0

Notez également qu'il n'y a pas de méthode addObject pour NSArray (vous ne pouvez pas ajouter des objets à un NSArray après son été créé); vous voulez NSMutableArray.

Au lieu de:

NSArray *location[3]; 

vous voulez probablement quelque chose comme:

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

Pour plus pour la première réponse. Lorsque vous aurez besoin de lire CGPoint retour de votre tableau, vous pouvez utiliser quelque chose comme ça:

CGPoint point = [(NSValue *)[pointsArray objectAtIndex:i] CGPointValue]; 
0

-t-il être un NSArray? Pourquoi ne pas utiliser un tableau de structures?

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

PlayerLocation players[3]; 

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

Ou selon votre conception, il peut être plus judicieux de déclarer une classe Objective-C qui contient x, y, z les coordonnées comme Ivars et stocker ces objets dans un NSArray.

@interface PlayerLocation : NSObject { 
    CGPoint location; 
    CGFloat height; 
} 
@end