【问题标题】:UIColor initializer (cannot find an initializer of type 'UIColor' that accepts ....) error [duplicate]UIColor 初始化程序(找不到接受 .... 的“UIColor”类型的初始化程序)错误 [重复]
【发布时间】:2015-06-15 04:48:42
【问题描述】:

我知道这不是一种合适的方法,但为了学习,我有一个选择器控件,其中包含四个组件和每个 255 行来更改基于 RGB-alpha 的“视图”背景颜色。 我知道UIColor(red: <#CGFloat#>, green: <#CGFloat#>, blue: <#CGFloat#>, alpha: <#CGFloat#>) 接受四个浮点数作为每种颜色的参数,但我得到了错误:
找不到接受类型为“(红色:Float,绿色:Float,蓝色:Float,alpha:Float)”的参数列表的“UIColor”类型的初始化程序
怎么了?

func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {

    var newbackgroundColor = UIColor()

    var redCode: Float = 0.0
    var greenCode: Float = 0.0
    var blueCode: Float = 0.0
    var alphaCode: Float = 0.0

    if component == 0 {
        switch row {
        case 0..<256:
            redCode = Float(row/255)
            newbackgroundColor = UIColor(red: redCode, green: greenCode, blue: blueCode, alpha: alphaCode)
        default:
            break
        }

    } else if component == 1 {
        switch row {
        case 0..<256:
            greenCode = Float(row/255)
            newbackgroundColor = UIColor(red: redCode, green: greenCode, blue: blueCode, alpha: alphaCode)
        default:
            break
        }

    } else if component == 2{
        switch row {
        case 0..<256:
            blueCode = Float(row/255)
            newbackgroundColor = UIColor(red: redCode, green: greenCode, blue: blueCode, alpha: alphaCode)
        default:
            break
        }

    } else {
        switch row {
        case 0..<256:
            alphaCode = Float(row/255)
            newbackgroundColor = UIColor(red: redCode, green: greenCode, blue: blueCode, alpha: alphaCode)
        default:
            break
        }

    }

    self.view.backgroundColor = newbackgroundColor
}

【问题讨论】:

    标签: swift uipickerview uicolor


    【解决方案1】:

    使用CGFloat 而不是Float

    遇到此类错误时请查看 API 文档

    【讨论】:

    • 不知道CGFloat也是一种类型!! :D
    • 大部分 CG 和 NS 类型都可以使用 Swift,因为它们是所有框架 API 所需要的
    【解决方案2】:

    除了 Float 与 CGFloat 不同之外,您还可以像这样使它更容易:

    class ViewController: UIViewController,UIPickerViewDelegate {
        @IBOutlet var pickerView: UIPickerView!
        func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
            return 4
        }
        func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
            return 256
        }
        func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
            view.backgroundColor = UIColor(red: CGFloat(pickerView.selectedRowInComponent(0))/255, green: CGFloat(pickerView.selectedRowInComponent(1))/255, blue: CGFloat(pickerView.selectedRowInComponent(2))/255, alpha: CGFloat(pickerView.selectedRowInComponent(3))/255)
        }
        func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! {
            return "\(row)"
        }
        override func viewDidLoad() {
            super.viewDidLoad()
            pickerView.delegate = self
            pickerView.backgroundColor = UIColor.whiteColor()
        }
        override func viewDidAppear(animated: Bool) {
            pickerView.selectRow(255, inComponent: 0, animated: false)
            pickerView.selectRow(0, inComponent: 1, animated: false)
            pickerView.selectRow(0, inComponent: 2, animated: false)
            pickerView.selectRow(255, inComponent: 3, animated: false)
            view.backgroundColor = UIColor(red: CGFloat(pickerView.selectedRowInComponent(0))/255, green: CGFloat(pickerView.selectedRowInComponent(1))/255, blue: CGFloat(pickerView.selectedRowInComponent(2))/255, alpha: CGFloat(pickerView.selectedRowInComponent(3))/255)
        }
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
        }
    }
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多