Comment imprimer ou enregistrer la valeur de l'objet CGSize?

88

J'essayais de journaliser (imprimer) la valeur de l'objet CGSize comme ceci:

CGSize sizeOfTab = CGSizeMake(self.frame.size.width/tabCount, 49);

NSLog(@"size of tab is %@",sizeOfTab);

Y a-t-il quelque chose qui ne va pas dans ce code; mon application plante pendant que le contrôle arrive à l'instruction NSLog.

Merci Prasad

Prasad
la source
2
NSStringFromCGSize () et aussi NSStringFromCGRect ()
Fattie

Réponses:

55

Vous pouvez appeler ce qui suit pour imprimer la valeur que vous recherchez:

NSLog(@"width = %f, height = %f", mySize.width, mySize.height);
Luke
la source
217

Essaye ça

CGSize sizeOfTab = CGSizeMake(self.frame.size.width/tabCount, 49);
NSLog(@"size of tab is %@",NSStringFromCGSize(sizeOfTab));

Le crash se produit car il sizeOfTabn'est pas au NSStringformat.

visakh7
la source
3
Cool c'est quelque chose de nouveau que j'ai appris aujourd'hui. +1, mais je ne supprimerai pas ma réponse :-P.
Praveen S
@Praveen: Merci ... Heureux de vous aider à apprendre quelque chose de nouveau aujourd'hui ... Je ne fais que rendre la pareille. J'ai été et j'ai toujours reçu de telles informations via SO.
visakh7
1
@ 7KV7 Le crash se produit car ce sizeOfTabn'est pas un objet (n'importe quel objet fonctionnerait, pas seulement a NSString). CGSizeest une structure.
albertamg
merci son fonctionnement bien, mais son affichage {nan, 49}, qu'est-ce que nan?
Prasad
@Prasad: nan, je pense, signifie Pas un nombre. qu'est-ce que tabCount? essayez la journalisationself.frame.size.width/tabCount
visakh7
11

Comme JoeBlow l'a mentionné ( j'ai remarqué après avoir tapé et formaté cette réponse ), il y a aussi la fonction UIKit NSStringFromCGSize(), pour une jolie impression, et son inverse CGSizeFromString(), pour créer une CGSizestructure à partir d'un NSStringobjet.

Apple documente le stringparamètre de comme suit:CGSizeFromString(string)

Une chaîne dont le contenu est de la forme "{ w , h }", où w est la largeur et h est la hauteur. Les valeurs w et h peuvent être des valeurs entières ou flottantes. Un exemple de chaîne valide est @ "{3.0,2.5}". La chaîne n'est pas localisée, les éléments sont donc toujours séparés par une virgule.


Exemple

CGSize size = CGSizeFromString(@"{320,568}");
NSLog(@"Pretty printed size: %@", NSStringFromCGSize(size));

Production

Pretty printed size: {320, 568}

Autres fonctions utiles ( référence CGGeometry )

  • CGRectGetHeight ()
  • CGRectGetWidth ()
Yurrriq
la source
6

% @ signifie que vous essayez d'insérer une chaîne. CGSize n'est pas une chaîne et ne peut pas être converti automatiquement en un. C'est pourquoi votre application plante. Au lieu de cela, vous devez enregistrer les propriétés individuelles séparément, comme

NSLog(@"width is %f, height is %f.", sizeOfTab.width, sizeOfTab.height);

% f est utilisé car les propriétés width et height sont du type float .

Pour les autres conversions de format, consultez la documentation: http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Strings/Articles/formatSpecifiers.html

Greg
la source
Bienvenue à SO. +1 pour une réponse détaillée.
Praveen S
Merci. J'ai jeté un coup d'œil et c'est étonnant de voir combien de personnes ne se donnent jamais la peine de regarder la documentation avant de poser une question. J'ai mis le lien là-bas afin que nous n'ayons pas une autre question demandant comment imprimer un int .
Greg
3

CGSizea les memebers largeur et hauteur qui sont de type CGFloat. Vous pouvez les imprimer en utilisant les

NSLog(@"Width = %f, height = %f",sizeOfTab.width, sizeofTab.height);
Praveen S
la source
3

Ici, self.view est la vue de la classe UIView. Vous pouvez imprimer n'importe quel cadre avec ce journal.

      NSLog(@"self.view.Frame=%@", NSStringFromCGRect(self.view.frame));
Disha
la source