在Swift

时间:2015-11-14 14:12:02

标签: swift optimization uibutton background-color

我有三个UIButtons,每个都有不同的(UIColor)backgroundColor;例如,一个backgroundColor的{​​{1}}是蓝色,一个是粉红色,另一个是橙色。当我点击每个UIButton时,我想直接从它的UIButton属性中获取确切的RGB(红色,绿色,蓝色)颜色值。 (例如,如果我点击粉红色backgroundColor的{​​{1}},我将得到返回的RGB值 - R:255,G:0,B:128。)另一种解释方法是,我想将UIButton的UIColor backgroundColor转换为UIColor RGB值。

在Swift中,提取UIButton' s backgroundColor的RGB(红色,绿色,蓝色)颜色值的最简单,最有效的代码是什么,然后显示结果在UIButton

My buttons

1 个答案:

答案 0 :(得分:3)

您的任务由三部分组成:

  • 获取已从点击事件处理程序中单击的按钮
  • 鉴于UIButton获取其背景颜色,
  • 鉴于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
}