Wie drucke oder protokolliere ich den Wert eines CGSize-Objekts?

88

Ich habe versucht, den Wert des CGSize-Objekts wie folgt zu protokollieren (zu drucken):

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

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

Ist in diesem Code etwas falsch? Meine App stürzt ab, während die Steuerung zur NSLog-Anweisung kommt.

Danke Prasad

Prasad
quelle
2
NSStringFromCGSize () und auch NSStringFromCGRect ()
Fattie

Antworten:

55

Sie können Folgendes aufrufen, um den gewünschten Wert auszudrucken:

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

Versuche dies

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

Der Absturz tritt auf, weil er sizeOfTabnicht im NSStringFormat vorliegt.

visakh7
quelle
3
Cool, das ist etwas Neues, das ich heute gelernt habe. +1, aber ich werde meine Antwort nicht löschen :-P.
Praveen S
@Praveen: Danke. Ich bin froh, dass ich dir heute helfen kann, etwas Neues zu lernen. Ich erwidere nur den Gefallen. Ich war und bin am empfangenden Ende solcher Informationen durch SO.
Visakh7
1
@ 7KV7 Der Absturz tritt auf, weil sizeOfTabes sich nicht um ein Objekt handelt (jedes Objekt würde funktionieren, nicht nur ein NSString). CGSizeist eine Struktur.
Albertamg
danke, es funktioniert gut, aber es zeigt {nan, 49} an, was ist nan?
Prasad
@ Prasad: nan Ich denke, steht für Not a Number. Was ist tabCount? versuchen Sie die Protokollierungself.frame.size.width/tabCount
visakh7
11

Wie JoeBlow erwähnte ( ich habe es nach dem Eingeben und Formatieren dieser Antwort bemerkt ), gibt es auch die UIKit-Funktion NSStringFromCGSize()zum hübschen Drucken und umgekehrt CGSizeFromString(), zum Erstellen einer CGSizeStruktur aus einem NSStringObjekt.

Apple dokumentiert den stringParameter wie folgt:CGSizeFromString(string)

Eine Zeichenfolge, deren Inhalt die Form "{ w , h }" hat, wobei w die Breite und h die Höhe ist. Die Werte w und h können Ganzzahl- oder Gleitkommawerte sein. Ein Beispiel für eine gültige Zeichenfolge ist @ "{3.0,2.5}". Die Zeichenfolge ist nicht lokalisiert, daher werden Elemente immer durch ein Komma getrennt.


Beispiel

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

Ausgabe

Pretty printed size: {320, 568}

Andere nützliche Funktionen ( CGGeometry-Referenz )

  • CGRectGetHeight ()
  • CGRectGetWidth ()
yurrriq
quelle
6

% @ bedeutet, dass Sie versuchen, eine Zeichenfolge einzufügen. CGSize ist keine Zeichenfolge und kann nicht automatisch in eine Zeichenfolge konvertiert werden. Deshalb stürzt Ihre App ab. Stattdessen müssen Sie einzelne Eigenschaften wie z

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

% f wird verwendet, da die Eigenschaften width und height vom Typ float sind .

Weitere Formatkonvertierungen finden Sie in den Dokumenten: http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Strings/Articles/formatSpecifiers.html

Greg
quelle
Willkommen bei SO. +1 für eine detaillierte Antwort.
Praveen S
Vielen Dank. Ich habe mich umgesehen und es ist erstaunlich zu sehen, wie viele Leute sich nie die Mühe gemacht haben, sich die Dokumente anzusehen, bevor sie eine Frage gestellt haben. Ich habe den Link dort eingefügt, damit wir keine weitere Frage bekommen, wie ein Int gedruckt werden soll .
Greg
3

CGSizehat die Mitglieder Breite und Höhe, die vom Typ sind CGFloat. Sie können sie wie folgt drucken

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

Hier ist self.view die Ansicht der UIView-Klasse. Mit diesem Protokoll können Sie jeden Rahmen drucken.

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