Transparent Image Viewer для OS X
Я всё пытаюсь что-нибудь придумать, чтобы можно было удобно делать pixel perfect вёрстку экранов при разработке iOS-приложений. Чтобы можно было удобно и наглядно сравнивать макет и результат. Запилил сегодня вот такую тулзу для OS X - почти прозрачное окно, в котором можно открыть макет, наложить на Xcode или на симулятор и смотреть, что получилось. Ползунком можно менять прозрачность, чтобы проверять соответствие.
Может кому пригодится. А может кто-то тоже чувствует боль и поучаствует в разработке.
Исходники лежат на github.
P.S. моё первое приложение для OS X.
comment commentsКатегория CALayer+UIColor
Хорошую штуку нашёл на Stack Overflow. В Xcode в Interface Builder можно задать что-то для UI через User Defined Runtime Attributes. Мне понадобилось задать border. Так вот толщину границы layer.borderWidth задать можно и она подхватится, а вот цвет - нет. layer.borderColor хранит значение типа CGColorRef, а цвет, который ты можешь выбрать в Interface Builder - это UIColor. Простая категория позволяет использовать UIColor через свойство layer.borderUIColor.
CALayer+UIColor.h :
//
// CALayer+UIColor.h
//
// Created by Sergey Armodin on 29/05/15.
// Copyright (c) 2015 Sergey Armodin. All rights reserved.
//
#import <QuartzCore/QuartzCore.h>
#import <UIKit/UIKit.h>
@interface CALayer (UIColor)
/**
* CGColor to borderColor
*/
@property(nonatomic, assign) UIColor* borderUIColor;
@end
CALayer+UIColor.m :
//
// CALayer+UIColor.m
//
// Created by Sergey Armodin on 29/05/15.
// Copyright (c) 2015 Sergey Armodin. All rights reserved.
//
#import "CALayer+UIColor.h"
@implementation CALayer (UIColor)
/**
* Setter
*
* @param color UIColor
*/
- (void)setBorderUIColor:(UIColor *)color {
self.borderColor = color.CGColor;
}
/**
* Getter
*
* @return UIColor
*/
- (UIColor *)borderUIColor {
return [UIColor colorWithCGColor:self.borderColor];
}
@end
И вуаля:
CompareShots
Выпустил новое приложение - CompareShots.
В ходе работы возникла мысль, что неплохо бы иметь какой-то инструмент для сравнения макета и фактического результата. За вечер написал такую вот тулзу. Ещё за несколько вечеров сделал скриншоты. Да, на скриншоты ушло времени больше :)
Приложение позволяет выбрать 2 изображения из библиотеки устройства. Например, макет приложения или сайта от дизайнера, и скриншот того, что сделал разработчик, и проверить соответствие - действительно ли всё пиксель в пиксель свёрстано. Пока держишь палец на экране - показывается первая картинка. Убираешь - вторая. Есть слайдер прозрачности, можно наглядно увидеть, в каких местах несоответствие. Результат несоответствия в виде картинки можно расшарить или отправить по почте, или отправить в любой другое приложение, которое принимает картинки.
Приложения для iPhone и iPad.
comment commentsПотокобезопасное определение синглтона через GCD
Шпаргалка. Надоело каждый раз далеко бегать за ней.
+ (instancetype)sharedInstance {
static MyClass *sharedInstance = nil;
static dispatch_once_t oncePredicate;
dispatch_once(&oncePredicate, ^{
sharedInstance = [[self alloc] init];
});
return sharedInstance;
}
comment
comments
Получение номера дня недели на Objective-C
Шпаргалка по получению номера дня недели из NSDate:
/* берём Григорианский календарь*/
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
/* NSDateComponents позволяет вытащить из NSDate номер дня недели, день месяца и пр. */
NSDateComponents *comps = [gregorian components:NSWeekdayCalendarUnit fromDate:[NSDate date]];
// получаем номер дня. Он будет от 1 до 7
NSInteger weekday = [comps weekday];
В iOS, в зависимости от того, какой выбран регион в настройках устройства,неделя начинается или с понедельника, как в России, илис воскресенья, как в США. Если нужно вывести лишь короткое название дня недели, например: пн, вт, ср, чт, то можно так:
NSDateFormatter *weekdayDateFormatter = [[NSDateFormatter alloc] init];
[weekdayDateFormatter setDateFormat: @"EE"];
NSLog(@"%@", [weekdayDateFormatter stringFromDate:dateFromString]);
comment
comments
Симуляция плохого соединения с интернетом в OS X
Оставлю ещё одну шпаргалку в виде ссылки. Network Link Conditioner - тулза от Apple из набора Hardware IO Tools for Xcode. Позволяет лимитировать в макоси скорость соединения. Можно протестить, например, как приложение ведёт себя в условиях EDGE-соединений или хуже. То же самое есть в разделе Developer в настройках iOS, но то на девайсе, а тут в OS X.
Кстати, в том же наборе лежит симулятор для HomeKit.
comment commentsАвтоувеличение номера билда в Xcode
Ещё одна шпаргалка, чтобы потом быстро найти, в случае чего. В Xcode, как известно, можно при билде проекта запускать свои bash-скрипты.
Эти 2 строчки кода позволяют автоматически увеличивать номер билда в приложении:
buildNumber=$(git rev-list --all | wc -l)
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "${PROJECT_DIR}/${INFOPLIST_FILE}"
Первая строка считает количество коммитов в git-репозитории. Вторая - пишет их количество в .plist-файл таргета как номер билда. Каждый новый коммит увеличивает номер билда на единицу. Это один из способов.
Пихать в Build Phases нужного таргета.
comment comments