Jak wydrukować lub zarejestrować wartość obiektu CGSize?

88

Próbowałem zarejestrować (wydrukować) wartość obiektu CGSize w następujący sposób:

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

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

Czy jest coś nie tak w tym kodzie; moja aplikacja ulega awarii, gdy sterowanie dochodzi do instrukcji NSLog.

Dzięki, Prasad

Prasad
źródło
2
NSStringFromCGSize (), a także NSStringFromCGRect ()
Fattie

Odpowiedzi:

55

Możesz wywołać następujące czynności, aby wydrukować wartość, której szukasz:

NSLog(@"width = %f, height = %f", mySize.width, mySize.height);
Łukasz
źródło
217

Spróbuj tego

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

Awaria występuje, ponieważ sizeOfTabnie jest w NSStringformacie.

visakh7
źródło
3
Fajnie, to jest coś nowego, czego się dzisiaj nauczyłem. +1, ale nie usunę odpowiedzi :-P.
Praveen S
@Praveen: Dzięki ... Cieszę się, że mogę ci pomóc nauczyć się czegoś nowego dzisiaj ... Po prostu odwzajemniam przysługę. Byłem i nadal otrzymuję takie informacje za pośrednictwem SO.
visakh7
1
@ 7KV7 Awaria występuje, ponieważ sizeOfTabnie jest obiektem (działałby dowolny obiekt, nie tylko a NSString). CGSizejest strukturą.
albertamg
thanku działa dobrze, ale wyświetla {nan, 49}, co to jest nan?
Prasad,
@Prasad: nan myślę, że oznacza Not a Number. co to jest tabCount? spróbuj zalogować sięself.frame.size.width/tabCount
visakh7
11

Jak wspomniał JoeBlow ( zauważyłem po wpisaniu i sformatowaniu tej odpowiedzi ), istnieje również funkcja UIKit NSStringFromCGSize(), do ładnego drukowania i jej odwrotność CGSizeFromString(), do tworzenia CGSizestruktury z NSStringobiektu.

Apple dokumentuje następujący stringparametr :CGSizeFromString(string)

Ciąg, którego zawartość ma postać „{ w , h }”, gdzie w to szerokość, a h to wysokość. W W i H wartości mogą być liczbami całkowitymi lub liczb rzeczywistych. Przykład prawidłowego ciągu to @ "{3.0,2.5}". Ciąg nie jest zlokalizowany, więc elementy są zawsze oddzielane przecinkami.


Przykład

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

Wynik

Pretty printed size: {320, 568}

Inne przydatne funkcje ( odniesienie do geometrii CG )

  • CGRectGetHeight ()
  • CGRectGetWidth ()
yurrriq
źródło
6

% @ oznacza, że ​​próbujesz wstawić ciąg. CGSize nie jest ciągiem znaków i nie można go automagicznie przekonwertować na jeden. Dlatego Twoja aplikacja się zawiesza. Zamiast tego musisz osobno rejestrować poszczególne właściwości, takie jak

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

% f jest używane, ponieważ właściwości width i height są typu float .

Informacje na temat innych konwersji formatów można znaleźć w dokumentacji: http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Strings/Articles/formatSpecifiers.html

Greg
źródło
Witamy w SO. +1 za szczegółową odpowiedź.
Praveen S,
Dzięki. Rozejrzałem się i to niesamowite, jak wielu ludzi nigdy nie zawracało sobie głowy patrzeniem na doktorów przed zadaniem pytania. Umieściłem tam link, żeby nie dostać kolejnego pytania, jak wydrukować int .
Greg,
3

CGSizema szerokość i wysokość elementów, które są typu CGFloat. Możesz je wydrukować w następujący sposób

NSLog(@"Width = %f, height = %f",sizeOfTab.width, sizeofTab.height);
Praveen S
źródło
3

Tutaj self.view jest widokiem klasy UIView. Za pomocą tego dziennika możesz wydrukować dowolną ramkę.

      NSLog(@"self.view.Frame=%@", NSStringFromCGRect(self.view.frame));
Disha
źródło