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

12

我尝试通过创建使用滑块来选择红、绿、蓝和透明度值的颜色来改变我的应用程序的按钮颜色。因此,我创建了一个变量来保存用户创建的颜色。

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.
}
}

第二个是RGB滑块系统的代码。

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

}

}

但是这个应用程序在打开时立即崩溃,并出现以下错误:

Terminating app due to uncaught exception 'NSInvalidArgumentException',reason:'*** -CGColor not defined for the UIColor; need to first convert colorspace.'

我真的需要帮助。谢谢。


将方法参数类型从 AnyObject 更改为 UISlider。 - Leo Dabus
请确保您传递的值在0到1之间。 - Leo Dabus
buttonColor是什么类型的属性? - I make my mark
@user3654258 是一个全局变量,类型为 UIColor。 - Leo Dabus
尝试将所有的UIColor更改为CGColor? - Eric
1个回答

15
问题在于由UIColor()初始化程序创建的实例并不代表实际颜色。如果你更仔细地查看崩溃消息,你会发现它实际上创建了一个UIPlaceholderColor实例 - 正如名称所示,它似乎作为任何颜色信息缺失时的“占位符”。因此,您不能将其分配给任何视图的backgroundColor属性。
解决方案是为您的buttonColor定义一个默认颜色。在您的情况下,我建议使用clearColor
var buttonColor = UIColor.clearColor()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接