Имейте в виду, что этот метод будет успешным, только если начальный цвет находится в «совместимом цветовом пространстве», которое может варьироваться в зависимости от устройства / ОС. Например, я только что обнаружил, что вызов этого метода в [UIColor darkGrayColor] завершится ошибкой на iPad 2 под управлением iOS 7. Однако тот же цвет отлично работает на iPad Air под управлением iOS 8.
devios1
@ devios1 Это, вероятно, можно решить, сначала сериализуя цвет, а затем десериализуя его, используя NSKeyedArchiver, например:multipliedColor = [NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiver archivedDataWithRootObject: multipliedColor]];
Альберт Реншоу
40
SWIFT 3 и 4
Я обнаружил, что cgColor.components не всегда возвращает 4 значения цвета, поэтому я изменил это так, чтобы он получал их из оболочки CIColor.
не генерировалось ли предупреждение при попытке неявно преобразовать CGFloat в float? :)
braden
5
UIColor*color =[[UIColor greenColor] retain];//line 1//OR(You will have color variable either like line 1 or line 2)
color = curView.backgroundColor;//line 2CGColorRef colorRef =[color CGColor];int _countComponents =CGColorGetNumberOfComponents(colorRef);if(_countComponents ==4){constCGFloat*_components =CGColorGetComponents(colorRef);CGFloat red = _components[0];CGFloat green = _components[1];CGFloat blue = _components[2];CGFloat alpha = _components[3];NSLog(@"%f,%f,%f,%f",red,green,blue,alpha);}[color release];
Начиная с iOS 2.0 существует метод частного экземпляра, UIColorвызываемыйstyleString который возвращает строковое представление цвета RGB или RGBA, даже для таких цветов, как whiteColor, за пределами пространства RGB.
В Swift вы можете использовать заголовок моста, чтобы открыть интерфейс. С чистым Swift вам нужно будет создать @objcпротокол с частным методом и unsafeBitCastUIColorс протоколом:
Использование HandyUIKit делает это очень просто :
importHandyUIKitlet color =UIColor(red:0.1, green:0.2, blue:0.3, alpha:0.4)// get any of the rgba values
color.rgba.red // => 0.1
color.rgba.green // => 0.2
color.rgba.blue // => 0.3
color.rgba.alpha // => 0.4
Также есть аналогичный вариант получения hsbaзначений :
let color =UIColor(hue:0.1, saturation:0.2, brightness:0.3, alpha:0.4)// you can get any of the hsba values, too
color.hsba.hue // => 0.1
color.hsba.saturation // => 0.2
color.hsba.brightness // => 0.3
color.hsba.alpha // => 0.4
Просто установите его с помощью Carthage, и все готово.
Ответы:
Эти ссылки предоставляют дополнительную информацию:
источник
colors
, вы можете написать что-нибудь вроде,CGFloat red = colors[0];
error: <EXPR>:3:1: error: 'CGColorGetComponents' has been replaced by property 'CGColor.components'
В iOS 5 вы могли использовать:
источник
NSKeyedArchiver
, например:multipliedColor = [NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiver archivedDataWithRootObject: multipliedColor]];
SWIFT 3 и 4
Я обнаружил, что cgColor.components не всегда возвращает 4 значения цвета, поэтому я изменил это так, чтобы он получал их из оболочки CIColor.
SWIFT 2
Это не самый эффективный способ, поэтому я бы не стал использовать его, когда представление будет постоянно перерисовываться.
источник
Надеюсь, это будет полезно
источник
Просто сделал категорию для этого.
Идет что-то вроде:
Часть
eppz!kit
с большим количеством вкусностей UIColor .источник
Спасибо. Мне пришлось добавить
const
в начало строки, поскольку это генерировало предупреждение.источник
источник
Swift 3 версия ответа Дэвида Риса:
источник
Вы можете использовать компоненты CIColor (swift 5)
это работает и для цветового пространства без RGB
источник
Начиная с iOS 2.0 существует метод частного экземпляра,
UIColor
вызываемыйstyleString
который возвращает строковое представление цвета RGB или RGBA, даже для таких цветов, как whiteColor, за пределами пространства RGB.Цель-C:
В Swift вы можете использовать заголовок моста, чтобы открыть интерфейс. С чистым Swift вам нужно будет создать
@objc
протокол с частным методом иunsafeBitCast
UIColor
с протоколом:источник
Ответ, получивший наибольшее количество голосов, устарел:
Вместо этого используйте
myUIColor.cgColor.components
источник
Я хотел получить цвет фона
UITableViewStyle
"UITableViewStyleGrouped", поэтому вviewDidAppear:
методе я добавил код:NSLog(@"%@", self.tableView.backgroundView.backgroundColor);
Он сделал то, что я ожидал, и вернул журнал:
UIDeviceRGBColorSpace 0.937255 0.937255 0.956863 1
Короче говоря, просто введите
NSLog(@"%@", [UIColor whateverColor]);
источник
Использование HandyUIKit делает это очень просто :
Также есть аналогичный вариант получения
hsba
значений :Просто установите его с помощью Carthage, и все готово.
Я надеюсь, что это помогает!
источник
Я сделал несколько полезных макросов для этого и других элементов управления цветом:
В вашем случае вы просто использовали бы
Макросы:
источник
установите свой UIColor вот так
это для Xamarin ios ... но наверняка есть такой метод в Swift.
источник