CGColor没有为UIColor定义,需要先转换颜色空间。 Swift 2,Xcode 7

时间:2016-05-01 04:48:50

标签: xcode swift uicolor color-space cgcolor

我试图通过使用滑块创建颜色来选择红色,绿色,蓝色和Alpha的值来更改应用程序按钮的颜色。所以我创建了一个变量,它保存了用户创建的颜色。

ViewController是按钮的位置。 ChangeColors是RGB滑块系统。

import UIKit

import Foundation

var buttonColor = UIColor()

class ViewController: UIViewController {

@IBOutlet var tools: UIButton!

@IBOutlet var custom: UIButton!

@IBOutlet var support: UIButton!

@IBOutlet var donate: UIButton!



override func viewDidLoad() {
    super.viewDidLoad()

    tools.backgroundColor = buttonColor
    custom.backgroundColor = buttonColor
    support.backgroundColor = buttonColor
    donate.backgroundColor = buttonColor
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}
}

第二个是te RGB Slider System的代码。

import Foundation

import UIKit

class ChangeColors: UIViewController {

@IBOutlet var Red: UISlider!

@IBOutlet var Green: UISlider!

@IBOutlet var Blue: UISlider!

@IBOutlet var Alpha: UISlider!

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

@IBAction func preview(sender: AnyObject) {

    let rVal = CGFloat(Red.value)
    let gVal = CGFloat(Green.value)
    let bVal = CGFloat(Blue.value)
    let aVal = CGFloat(Alpha.value)

    self.view.backgroundColor = UIColor(red: rVal, green: gVal, blue: bVal, alpha: aVal)
}

@IBAction func change(sender: AnyObject) {

    let rVal = CGFloat(Red.value)
    let gVal = CGFloat(Green.value)
    let bVal = CGFloat(Blue.value)
    let aVal = CGFloat(Alpha.value)
    let color = UIColor(red: rVal, green: gVal, blue: bVal, alpha: aVal)

    buttonColor = color

}

}

但是应用程序一打开就会崩溃并收到以下错误:

由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'*** -CGColor未为UIColor定义;需要先转换颜色空间。

我真的需要帮助。谢谢。

1 个答案:

答案 0 :(得分:6)

问题是由UIColor()初始化程序创建的实例并不代表实际颜色。如果你更详细地查看崩溃消息,你会发现它实际上创建了一个UIPlaceholderColor实例 - 它(顾名思义)似乎充当了一个占位符'在没有任何颜色信息的情况下。因此,您无法将其分配给任何观看次数的backgroundColor

此修复程序定义了buttonColor的默认颜色。在您的情况下,我建议clearColor

var buttonColor = UIColor.clearColor()