:)
Полезно - когда делать интерфейс для иось (та и для макось наверное) без 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_" как-то побыстрее
Комментариев нет:
Отправить комментарий