NSLog com dados CGPoint


93

Eu tenho um CGPoint chamado ponto que está recebendo um toque:

UITouch *touch = [touches anyObject];

CGPoint point = [touch locationInView:self];

Quero obter o valor da coordenada x em meu log do console:

NSLog(@"x: %s", point.x);

Quando eu uso isso, a saída de registro para isso é:

x: (nulo)

Eu verifiquei que o ponto não é nulo quando isso é chamado usando o depurador e o relógio variável.

Qualquer ajuda apreciada,

Obrigado // :)

Respostas:


259

Na verdade, a maneira mais fácil de registrar um CGPointé:

NSLog(@"%@", NSStringFromCGPoint(point));

O equivalente ao Cocoa para desktop é NSStringFromPoint().


Isso é ainda melhor. A primeira resposta é a maneira mais fácil e leve. Mas isso me tira xey do CGPoint em um conjunto. Legal :) Ótima ferramenta :)
— Spanky,

Como o StackOverflow achou por bem reintroduzir essa questão em meu feed RSS, posso também simplificar minha solução geral: jens.ayton.se/blag/almost-elegant-cave-man-debugging que permite que você vá JA_DUMP(point);e obtenha “point = { 43, 96} ”registrados sem se preocupar com os códigos de formato.
— Jens Ayton

Como uso sua lib, uma vez que ela compila em I386, mas não em ARM? Quer dizer, como posso trabalhar em projetos iOS usando isso?
— Dan Rosenstark

Primeiro, você precisa construir o arquivo FindAlignment.c como um aplicativo iOS e executá-lo em um dispositivo (não em um simulador). Em seguida, copie o resultado em um novo bloco #elif antes do #else na linha 172 em JAValueToString.m. Se isso não funcionar, uma depuração adicional será necessária. Não posso fazer isso porque não estou no programa iOS.
— Jens Ayton

3
Também vale a pena notar que NSStringFromCGRect () também existe.
— djskinner

24

point.x é um número de ponto flutuante, então você deve usar:

NSLog(@"x: %f", point.x);

9

A maneira mais simples de registrar um CGPointvalor é usar a NSValueclasse, pois ela fornecerá todos os valores relevantes formatados de maneira adequada para o console. É feito assim:

NSLog(@"myPoint = %@", [NSValue valueWithCGPoint:myPoint]);

Você também pode usar os métodos +valueWithCGRecte quando estiver tentando registrar, digamos, as propriedades ( ) ou ( ) de a .+valueWithCGSizeNSValueframeCGRectsizeCGSizeUIView


1

NSLog(@"point x,y: %f,%f", point.x, point.y);


0

point.x é um número de ponto flutuante, então você deve codificar assim:

NSLog(@"%@",[NSString StringWithFormat:@"%f",point.x]);

Se vc quiser String valor significa que vc use isso !!

4
Você está fazendo uma string de formato desnecessária dentro de uma string de formato. As abordagens de Philippe e Ahruman são muito mais simples e alcançam exatamente os mesmos resultados.
— Brad Larson

0

usar :

NSLog (@ "% @", NSStringFromCGPoint (ponto));

Você também pode usar NSString para as seguintes informações:

NSStringFromCGPoint
NSStringFromCGSize
NSStringFromCGRect
NSStringFromCGAffineTransform
NSStringFromUIEdgeInsets

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.