2015-11-14 9 views
2

У меня есть три UIButtons и у каждого есть другой (UIColor) backgroundColor; например, backgroundColor одного UIButton синий, один розовый, другой оранжевый. Когда я нажимаю каждый UIButton, я хочу получить точные значения цвета RGB (красный, зеленый, синий) непосредственно из его свойства backgroundColor. (Например, если я нажал на UIButton с розовым backgroundColor, я получу возвращаемые значения RGB - R: 255, G: 0, B: 128.) Еще один способ объяснить это: я хочу преобразовать UIButton UIColor backgroundColor в значения RIC UIColor.Получение цвета RGB из UIButton (UIColor) backgroundColor in Swift

В Swift, что самый простой и самый эффективный код для извлечения RGB (красный, зеленый, синий) цвет значений а UIButton «s backgroundColor, а затем отобразить результат в UILabel?

My buttons

+1

Почему? Ваша модель должна сообщить вам о нужной вам ценности, а не о представлении. – Wain

+0

@Wain Спасибо за ваш ответ. Интересно, что вы упомянули об этом. Почему модель лучше информировать значение вместо представления? – user4806509

ответ

3

Ваша задача состоит из трех частей:

  • Получение кнопки, которая была перешедших из обработчика событий нажмите
  • дано UIButton получить цвет фона и
  • Учитывая a UIColor получить его компоненты RGB

Первая задача проста: добавьте sender к методу, обрабатывающему клик. Вторая задача также проста: все, что вам нужно сделать, - это получить доступ к объекту backgroundColor. Наконец, чтобы получить компоненты, вам нужно позвонить getRGB.

@IBAction func mainButton(button: UIButton) { 
    let bgColor:UIColor = button.backgroundColor! 
    var r : CGFloat = 0 
    var g : CGFloat = 0 
    var b : CGFloat = 0 
    var a: CGFloat = 0 
    if bgColor.getRed(&r, green: &g, blue: &b, alpha: &a) { 
     ... r, g, b, and a represent the component values. 
    } 
} 

Обратите внимание, что было бы гораздо проще сделать это так, как MVC, то есть путь извлечения компонентов, предварительно сохраненные в модели. Установите теги кнопок на 0, 1 и 2, создайте справочную таблицу и используйте ее для выполнения задачи:

let componentForTag: Int[][] = [[255, 0, 128], [128, 0, 0],[128, 128, 0]] 
... 
@IBAction func mainButton(button: UIButton) { 
    let components = componentForTag[button.tag] 
    // That's it! components array has the three components 
} 
+0

Большое спасибо. Строка 'UIColor bgColor = button.backgroundColor!' Не работала в Swift 2, поэтому я изменил ее на 'let bgColor: UIColor = button.backgroundColor!', И первый вариант работал очень хорошо. Я знал о таблице поиска во втором методе, и это хорошее решение, если вещи остаются в основном статичными с несколькими кнопками, но мне нравится возможность первого метода выбрать цвет «в пути» прямо из источника , Я не знал о 'getRed' и вижу, что есть' getHue' и 'getWhite', я буду исследовать их более подробно. Цените свой ответ и помощь. ура – user4806509

Смежные вопросы