:)
Полезно - когда делать интерфейс для иось (та и для макось наверное) без IBuilder-а (т.е. когда контрольчики создаются и расставляются вручную в коде) очень часто выручало - обвести контрол рамкой: сразу видно, где он, куда на сколько сьехал и т.д. Так что в последних проектах делаю полезность: в .pch файле добавляю немного кода:
#ifdef DEBUG
#import <QuartzCore/QuartzCore.h>
#define str_rect(rect) NSStringFromCGRect(rect)
#define str_pt(pt) NSStringFromCGPoint(pt)
#define str_sz(sz) NSStringFromCGSize(sz)
#define str_bool(b) (b?@"Yes":@"No")
#define str_inset(i) NSStringFromUIEdgeInsets(i)
#define RGB3(color) [UIColor colorWithRed:((color & 0xff0000) >> 16) / 255.0f \
green:((color & 0xff00) >> 8) / 255.0f \
blue:(color & 0xff) / 255.0f \
alpha:1.0]
static inline void borderControl(UIView * ctrl) {
ctrl.layer.borderColor = RGB3(random()).CGColor;
ctrl.layer.borderWidth = 1;
}
#endif
И потом в проблемных местах просто пишу: borderControl(loginLabel);
Проблемный контрол обведется рамкой 1-пиксельной, случайного цвета
Почему так - с таким способом а) не надо лишней писанины; б) не надо лишних import/include в) если вдруг забудется из кода убрать отладочные рамки - при сборке релиза компилятор просто ругнется
Ну и там же просто для ленивых, которым писать NSStringFromCGRect.. очень уж долго - макросы для сокращения "многобукф"; да, автокомплишн никто не отменял, но надо все равно ж набрать "NSString" пока появятся варианты, "str_" как-то побыстрее
Комментариев нет:
Отправить комментарий