NSLog z danymi CGPoint


93

Mam punkt CGPoint, któremu przypisano dotyk:

UITouch *touch = [touches anyObject];

CGPoint point = [touch locationInView:self];

Chcę pobrać wartość współrzędnej x do mojego dziennika konsoli:

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

Kiedy używam tego, dane wyjściowe dziennika to:

x: (null)

Sprawdziłem, że punkt nie jest zerowy, gdy jest wywoływany przy użyciu debugera i obserwatora zmiennych.

Każda pomoc doceniona,

Dzięki // :)

Odpowiedzi:


259

Właściwie najłatwiejszym sposobem zarejestrowania a CGPointjest:

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

Pulpitowy odpowiednik Cocoa to NSStringFromPoint().


To jest jeszcze lepsze. Pierwsza odpowiedź to najłatwiejszy i najlżejszy sposób. Ale to daje mi oba x i y z CGPoint w jednym zestawie. Fajnie :) Świetne narzędzie :)
— Spanky

Ponieważ StackOverflow uznał za stosowne ponowne wprowadzenie tego pytania w moim kanale RSS, równie dobrze mogę odpicować moje ogólne rozwiązanie: jens.ayton.se/blag/almost-elegant-cave-man-debugging, które pozwala JA_DUMP(point);uzyskać „point = { 43, 96} ”bez martwienia się o kody formatu.
— Jens Ayton,

Jak używać twojej biblioteki, skoro kompiluje się na I386, ale nie na ARM? Mam na myśli, jak mogę pracować nad projektami iOS, używając go?
— Dan Rosenstark

Najpierw musisz skompilować plik FindAlignment.c jako aplikację na iOS i uruchomić go na urządzeniu (nie na symulatorze). Następnie skopiuj wynik do nowego bloku #elif przed #else w wierszu 172 w JAValueToString.m. Jeśli to nie zadziała, wymagane będzie dodatkowe debugowanie. Nie mogę tego zrobić, ponieważ nie jestem w programie na iOS.
— Jens Ayton

3
Warto również zauważyć, że NSStringFromCGRect () również istnieje.
— djskinner


9

Najprostszym sposobem zarejestrowania CGPointwartości jest użycie NSValueklasy, ponieważ dostarczy ona wszystkie odpowiednie wartości dobrze sformatowane dla konsoli. Zrobiono to tak:

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

Możesz także użyć metod +valueWithCGRecti +valueWithCGSize, NSValuegdy próbujesz zarejestrować, powiedzmy, właściwości frame( CGRect) lub size( CGSize) UIView.



0

point.x jest liczbą zmiennoprzecinkową, więc powinieneś kodować w ten sposób:

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

Jeśli chcesz wartość String oznacza, że ​​po prostu użyj tego !!

4
Robisz niepotrzebny ciąg formatu w ciągu formatu. Podejścia Philippe'a i Ahrumana są znacznie prostsze i dają dokładnie takie same wyniki.
— Brad Larson

0

posługiwać się :

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

Możesz również użyć NSString do następujących informacji:

NSStringFromCGPoint
NSStringFromCGSize
NSStringFromCGRect
NSStringFromCGAffineTransform
NSStringFromUIEdgeInsets

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.