¿Cómo imprimir o registrar el valor del objeto CGSize?

88

Estaba tratando de registrar (imprimir) el valor del objeto CGSize de esta manera:

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

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

¿Hay algo incorrecto en este código? mi aplicación se bloquea mientras el control llega a la declaración NSLog.

Gracias Prasad

Prasad
fuente
2
NSStringFromCGSize () y también NSStringFromCGRect ()
Fattie

Respuestas:

55

Puede llamar a lo siguiente para imprimir el valor que busca:

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

Prueba esto

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

El bloqueo se produce porque sizeOfTabno está en NSStringformato.

visakh7
fuente
3
Genial, esto es algo nuevo que aprendí hoy. +1, pero no eliminaré mi respuesta :-P.
Praveen S
@Praveen: Gracias ... Me alegro de poder ayudarte a aprender algo nuevo hoy ... Solo te devuelvo el favor. He estado y sigo recibiendo tal información a través de SO.
visakh7
1
@ 7KV7 El bloqueo ocurre porque sizeOfTabno es un objeto (cualquier objeto funcionaría, no solo a NSString). CGSizees una estructura.
albertamg
gracias, funciona bien, pero muestra {nan, 49}, ¿qué es nan?
Prasad
@Prasad: nan creo que significa Not a Number. ¿Qué es tabCount? intente iniciar sesiónself.frame.size.width/tabCount
visakh7
11

Como mencionó JoeBlow ( noté después de escribir y formatear esta respuesta ), también existe la función UIKit NSStringFromCGSize(), para una impresión bonita, y su inversa CGSizeFromString(), para crear una CGSizeestructura a partir de un NSStringobjeto.

Apple documenta el stringparámetro de la siguiente manera:CGSizeFromString(string)

Una cadena cuyo contenido tiene la forma "{ w , h }", donde w es el ancho y h es la altura. Los w y h valores pueden ser valores enteros o de coma flotante. Un ejemplo de una cadena válida es @ "{3.0,2.5}". La cadena no está traducida, por lo que los elementos siempre se separan con una coma.


Ejemplo

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

Salida

Pretty printed size: {320, 568}

Otras funciones útiles ( referencia de CGGeometry )

  • CGRectGetHeight ()
  • CGRectGetWidth ()
yurrriq
fuente
6

% @ significa que está intentando insertar una cadena. CGSize no es una cadena y no se puede convertir automáticamente en una. Es por eso que su aplicación falla. En su lugar, debe registrar propiedades individuales por separado, como

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

Se utiliza% f porque las propiedades de ancho y alto son del tipo float .

Para otras conversiones de formato, consulte los documentos: http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Strings/Articles/formatSpecifiers.html

Greg
fuente
Bienvenido a SO. +1 para una respuesta detallada.
Praveen S
Gracias. Eché un vistazo a mi alrededor y es sorprendente ver cuántas personas nunca se molestan en mirar los documentos antes de hacer una pregunta. Puse el enlace allí para que no recibamos otra pregunta sobre cómo imprimir un int .
Greg
3

CGSizetiene los miembros de ancho y alto que son de tipo CGFloat. Puede imprimirlos utilizando los siguientes

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

Aquí self.view es la vista de UIView Class. Puede imprimir cualquier fotograma con este registro.

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