Come stampare o registrare il valore dell'oggetto CGSize?


88

Stavo cercando di registrare (stampare) il valore dell'oggetto CGSize in questo modo:

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

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

C'è qualcosa di sbagliato in questo codice; la mia app si blocca mentre il controllo arriva all'istruzione NSLog.

Grazie Prasad


2
NSStringFromCGSize () e anche NSStringFromCGRect ()
Fattie

Risposte:


55

Puoi chiamare quanto segue per stampare il valore che stai cercando:

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

218

Prova questo

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

L'arresto si verifica perché sizeOfTabnon è in NSStringformato.


3
Fantastico, questa è una novità che ho imparato oggi. +1, ma non cancellerò la mia risposta :-P.
Praveen S

@ Praveen: Grazie .. Sono contento di averti aiutato a imparare qualcosa di nuovo oggi ... Restituisco solo il favore. Sono stato e tuttora ricevo tali informazioni tramite SO.
visakh7

1
@ 7KV7 Il crash si verifica perché sizeOfTabnon è un oggetto (qualsiasi oggetto funzionerebbe, non solo un NSString). CGSizeè una struttura.
Albertamg

grazie funziona bene, ma mostra {nan, 49}, cos'è nan?
Prasad

@ Prrasad: nan penso stia per Not a Number. cos'è tabCount? prova a registrareself.frame.size.width/tabCount
visakh7

11

Come ha detto JoeBlow ( ho notato dopo aver digitato e formattato questa risposta ), c'è anche la funzione UIKit NSStringFromCGSize(), per una bella stampa, e il suo inverso CGSizeFromString(), per creare una CGSizestruttura da un NSStringoggetto.

Apple documenta il stringparametro di come segue:CGSizeFromString(string)

Una stringa il cui contenuto ha la forma "{ w , h }", dove w è la larghezza e h è l'altezza. I valori w e h possono essere interi o float. Un esempio di stringa valida è @ "{3.0,2.5}". La stringa non è localizzata, quindi gli elementi sono sempre separati da una virgola.


Esempio

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

Produzione

Pretty printed size: {320, 568}

Altre funzioni utili ( riferimento CGGeometry )

  • CGRectGetHeight ()
  • CGRectGetWidth ()

6

% @ significa che stai cercando di inserire una stringa. CGSize non è una stringa e non può essere convertita automaticamente in una. Ecco perché la tua app si arresta in modo anomalo. Invece, devi registrare le singole proprietà separatamente, come

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

% f viene utilizzato perché le proprietà width e height sono del tipo float .

Per altre conversioni di formato, vedere i documenti: http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Strings/Articles/formatSpecifiers.html


Benvenuto in SO. +1 per una risposta dettagliata.
Praveen S

Grazie. Ho dato un'occhiata in giro ed è incredibile vedere quante persone non si preoccupano mai di guardare i documenti prima di fare una domanda. Ho inserito il collegamento lì in modo da non ricevere altre domande che chiedono come stampare un int .
Greg

3

CGSizeha i memebers larghezza e altezza che sono di tipo CGFloat. È possibile stamparli utilizzando quanto segue

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

3

Qui self.view è la vista di UIView Class. Puoi stampare qualsiasi frame con questo registro.

      NSLog(@"self.view.Frame=%@", NSStringFromCGRect(self.view.frame));
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.