Как распечатать или зарегистрировать значение объекта CGSize?

88

Я пытался записать (распечатать) значение объекта CGSize следующим образом:

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

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

Что-то не так в этом коде; мое приложение дает сбой, когда управление переходит к оператору NSLog.

Спасибо Прасад

Прасад
источник
2
NSStringFromCGSize (), а также NSStringFromCGRect ()
Fattie 03

Ответы:

55

Вы можете вызвать следующее, чтобы распечатать значение, которое вам нужно:

NSLog(@"width = %f, height = %f", mySize.width, mySize.height);
Люк
источник
217

Попробуй это

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

Сбой происходит из- sizeOfTabза NSStringнеправильного формата.

висах7
источник
3
Круто, это что-то новое, что я узнал сегодня. +1, но я не буду удалять свой ответ :-P.
Praveen S
@Praveen: Спасибо ... Рад, что я помог тебе узнать что-то новое сегодня ... Просто возвращаю тебе одолжение. Я был и до сих пор получаю такую ​​информацию через SO.
visakh7 08
1
@ 7KV7 Авария происходит из-за того, что sizeOfTabэто не объект ( подойдет любой объект, а не только NSString). CGSizeэто структура.
albertamg 08
спасибо, он работает нормально, но отображается {nan, 49}, что такое nan?
Прасад
@Prasad: nan, я думаю, означает «не число». что такое tabCount? попробуйте войтиself.frame.size.width/tabCount
visakh7 08
11

Как упоминал ДжоБлоу ( я заметил после ввода и форматирования этого ответа ), есть также функция UIKit NSStringFromCGSize()для красивой печати и ее обратная функция CGSizeFromString()для создания CGSizeструктуры из NSStringобъекта.

Apple документирует stringпараметр следующим образом:CGSizeFromString(string)

Строка, содержимое которой имеет форму "{ w , h }", где w - ширина, а h - высота. Значения w и h могут быть целыми или плавающими. Пример допустимой строки - @ "{3.0,2.5}". Строка не локализована, поэтому элементы всегда разделяются запятой.


пример

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

Выход

Pretty printed size: {320, 568}

Другие полезные функции ( Справочник CGGeometry )

  • CGRectGetHeight ()
  • CGRectGetWidth ()
юрррик
источник
6

% @ означает, что вы пытаетесь вставить строку. CGSize не является строкой и не может быть автоматически преобразован в нее. Вот почему ваше приложение вылетает. Вместо этого вам нужно регистрировать отдельные свойства отдельно, например

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

% f используется, потому что свойства width и height относятся к типу float .

Информацию о преобразованиях других форматов см. В документации: http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Strings/Articles/formatSpecifiers.html.

Грег
источник
Добро пожаловать в SO. +1 за подробный ответ.
Praveen S
Спасибо. Я огляделась, и удивительно видеть, как много людей никогда не смотрят документы, прежде чем задать вопрос. Я поместил ссылку туда, чтобы у нас не было другого вопроса о том, как напечатать int .
Грег
3

CGSizeимеет ширину и высоту членов типа CGFloat. Вы можете распечатать их, используя следующие

NSLog(@"Width = %f, height = %f",sizeOfTab.width, sizeofTab.height);
Правин С
источник
3

Здесь self.view - это представление класса UIView. Вы можете распечатать любую рамку с этим журналом.

      NSLog(@"self.view.Frame=%@", NSStringFromCGRect(self.view.frame));
Диша
источник