Como imprimir ou registrar o valor do objeto CGSize?

88

Eu estava tentando registrar (imprimir) o valor do objeto CGSize assim:

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

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

Há algo de errado neste código; meu aplicativo está travando enquanto o controle chega à instrução NSLog.

Obrigado Prasad

Prasad
fonte
2
NSStringFromCGSize () e também NSStringFromCGRect ()
Fattie

Respostas:

55

Você pode chamar o seguinte para imprimir o valor que procura:

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

Tente isto

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

A falha ocorre porque sizeOfTabnão está em NSStringformato.

visakh7
fonte
3
Legal, isso é algo novo que aprendi hoje. +1, mas não vou deletar minha resposta :-P.
Praveen S
@Praveen: Obrigado .. Fico feliz em ajudá-lo a aprender algo novo hoje ... Apenas retribuindo o favor. Recebi e ainda estou recebendo essas informações por meio do SO.
visakh7
1
@ 7KV7 O travamento ocorre porque sizeOfTabnão é um objeto (qualquer objeto funcionaria, não apenas um NSString). CGSizeé uma estrutura.
Albertamg
thanku está funcionando bem, mas está exibindo {nan, 49}, o que é nan?
Prasad
@Prasad: nan eu acho que significa Não é um número. o que é tabCount? tente registrarself.frame.size.width/tabCount
visakh7
11

Como JoeBlow mencionou ( notei depois de digitar e formatar esta resposta ), há também a função UIKit,, NSStringFromCGSize()para impressão bonita, e seu inverso,, CGSizeFromString()para criar uma CGSizeestrutura de um NSStringobjeto.

A Apple documenta o stringparâmetro da seguinte forma:CGSizeFromString(string)

Uma string cujo conteúdo está na forma "{ w , h }", onde w é a largura eh é a altura. Os valores w e h podem ser inteiros ou valores flutuantes. Um exemplo de string válida é @ "{3.0,2.5}". A string não é localizada, então os itens são sempre separados por vírgula.


Exemplo

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

Resultado

Pretty printed size: {320, 568}

Outras funções úteis ( referência CGGeometry )

  • CGRectGetHeight ()
  • CGRectGetWidth ()
Yurrriq
fonte
6

% @ significa que você está tentando inserir uma string. CGSize não é uma string e não pode ser convertido automaticamente em uma. É por isso que seu aplicativo trava. Em vez disso, você precisa registrar propriedades individuais separadamente, como

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

% f é usado porque as propriedades de largura e altura são do tipo flutuante .

Para outras conversões de formato, consulte os documentos: http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Strings/Articles/formatSpecifiers.html

Greg
fonte
Bem-vindo ao SO. +1 para uma resposta detalhada.
Praveen S
Obrigado. Dei uma olhada ao redor e é incrível ver quantas pessoas nunca se preocupam em olhar para os documentos antes de fazer uma pergunta. Coloquei o link lá para que não tenhamos outra pergunta perguntando como imprimir um int .
Greg
3

CGSizetem a largura e altura dos memebers que são do tipo CGFloat. Você pode imprimi-los usando o seguinte

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

Aqui self.view é a visão da classe UIView. Você pode imprimir qualquer quadro com este log.

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