¿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


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);

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.


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 ()

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


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);

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));
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.