Делаем невероятное: cоздаем UIColor от RGB-строки!!!
Вот прямо руки чешутся написать про это, а точнее высказать свое негодование.
Представьте, что вам вдруг во время программирования яблокодевайса понадобилось указать какой-либо цвет (ну там подхайлайтить что-то), то вы, определившись с цветом с помощью пипетки или на глаз (ну там ВЫРВИГЛАЗНОЖЕЛТЫЙ) пытаетесь создать объект класса UIColor. И тут начинается ступор. Я конечно понимаю, что компания Apple еще те извращенцы пытается быть не как все, но чтобы извратиться и придумать конструктор от объекта UIColor в виде покомпонентно разложенных каналов, причем не от нуля до 0xff
(да-да, я чуть не охренел от эротической фантазии того, кто это придумал), — а от дробного числа в интервале [0..1]!!!!
Блин, ну ребята, задавать цвет в rgb hex формате - это стандарт, который используется ну просто везде, начиная с самых древнейших версий HTML, CSS, Qt и так далее. Даже в андроиде не поленились написать метод Color.parseColor. Максимум, где я встретил такую нотацию - это при создании цвета в OpenGL. Т.е. примерно у каждого ui-разработчика есть представление в голове, что вот, противно- приятно-голубой цвет, который используется просто повсюду - это #0099cc
, оранжевый - это наоборот надо поменять местами каналы, и так далее. И тут у тебя начинается разрыв мозга, как привычный цвет в голове быстренько перевести в систему счисления от нуля до единицы?)) не, ну я конечно заметил, что разработчики ПРОВЕЛИ ИССЛЕДОВАНИЯ и заметили, что 50 оттенков серого настолько популярны, что они сделали специальный конструктор для этого - colorWithWhite:alpha:
В общем все грустно, я не пытаюсь сейчас показать какое-то изящество в написании говнокода, но я так понял, что этот метод должен присутствовать в каждом проекте:
UIColor* ColorFromStr(NSString *colorStr) { unsigned int color = 0; float r, g, b, a = 1.0; NSScanner *scanner = [NSScanner scannerWithString:colorStr]; [scanner setScanLocation:1]; [scanner scanHexInt:&color]; if ([colorStr length] == 9) { a = (color & 0xff) / 255.0; color >>= 8; } r = ((color & 0xff0000) >> 16) / 255.0; g = ((color & 0xff00) >> 8) / 255.0; b = (color & 0xff) / 255.0; return [UIColor colorWithRed:r green:g blue:b alpha:a]; }
UPD: Либо можно тоже самое изобразить на Swift:
extension UIColor { convenience init(htmlColor: String) { var color:UInt32 = 0; var r:CGFloat, g:CGFloat, b:CGFloat, a:CGFloat = 1.0; let scanner:NSScanner = NSScanner(string: htmlColor); scanner.scanLocation = 1; scanner.scanHexInt(&color) if (htmlColor.characters.count == 9) { a = CGFloat(color & 0xff) / 255.0; color >>= 8; } r = CGFloat((color & 0xff0000) >> 16) / 255.0; g = CGFloat((color & 0xff00) >> 8) / 255.0; b = CGFloat(color & 0xff) / 255.0; self.init(red:r, green:g, blue:b, alpha:a); } }