Написание макроса для этого: (Objective-C) - PullRequest
2 голосов
/ 15 июля 2010

У меня есть такой метод:

- (CGPoint) _convertCGPointCT2UIKit:(CGPoint)ctPoint{
 CGPoint uikitPoint = CGPointMake(ctPoint.x + INITIAL_HORIZ_OFFSET, 
          self.bounds.size.height - ctPoint.y - INITIAL_VERT_OFFSET);
 return uikitPoint;
}

Есть ли способ сделать это макросом? Я пробовал это, но я получаю ошибки типа "; ожидается раньше)" и т. Д.

#define CGPointUIKit2CT(p) CGPointMake(p.x - INITIAL_HORIZ_OFFSET, self.bounds.size.height - p.y - INITIAL_VERT_OFFSET);

Заранее спасибо.

Игнасио

Ответы [ 2 ]

5 голосов
/ 15 июля 2010

Несколько правил, которые помогут вам:

  • Обернуть все в скобках
  • Не заканчивайте макрос точкой с запятой, это, вероятно, то, что генерирует ваши ошибки. Вместо этого вставьте точку с запятой в свой код при использовании.

Вот мой ответ:

 #define CGPointUIKit2CT(p) CGPointMake(((p).x) - INITIAL_HORIZ_OFFSET, self.bounds.size.height - ((p).y) - INITIAL_VERT_OFFSET)
2 голосов
/ 16 июля 2010

Хотя могут быть причины, чтобы избежать отправки метода для чего-то подобного, нет причины делать это как макрос вместо статической встроенной функции:

static inline
CGPoint CGPointUIKit2CT(UIView *self, CGPoint  ctPoint) {
  CGPoint uikitPoint = CGPointMake(ctPoint.x + INITIAL_HORIZ_OFFSET,
      self.bounds.size.height - ctPoint.y - INITIAL_VERT_OFFSET);'

  return uikitPoint;
}

Это скомпилируется с тем же макросом, но обеспечит лучшую информацию для отладки и профилирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...