改变NSView的颜色

时间:2016-10-28 23:25:02

标签: swift macos swift3 rgb nsview

我正在创建一个简单的自定义NSView,允许用户分别为R,G和B值输入3个文本字段。我已经引用了这个问题和答案集here - 它只能说明Swift 2.0。那么,有没有人知道在Swift 3.0中获得同样效果的正确技巧?我似乎无法得到任何我正在做的事情。我不断得到各种各样的错误。

这是我正在使用的当前技术(这似乎有用......但是它不会考虑其他2个RGB值,因为它在@IBAction中使用了:

//viewDidLoad
RVCustomView.wantsLayer = true

@IBAction func redValue(_ sender: AnyObject) {
    print(red.stringValue)

    var rValue = 0
    let str = red.stringValue
    if let n = NumberFormatter().number(from: str) {
        rValue = Int(CGFloat(n))
    }

    CustomNSView.layer?.backgroundColor = CGColor(red: rValue, green: 255, blue: 255, alpha: 255)

}

2 个答案:

答案 0 :(得分:1)

如果要在每次R,G,B文本视图之一的值发生变化时动态更改NSView的背景颜色,可以使用controlTextDidChange(notification:) NSTextField委托方法加上三个文本字段中每个字段的出口。

每次更改其中一个字段时都会触发该方法,并使用它来读取RGB字段的值(通过出口)并相应地更改颜色。

 override func controlTextDidChange (notification: NSNotification?) {
    // assuming the text fields' value is between 0 and 255
    guard 
        let redValue = Float(redOutlet.stringValue),
        let greenValue = Float(greenOutlet.stringValue),
        let blueValue = Float(blueOutlet.stringValue)

        else { return }

     CustomNSView.layer?.backgroundColor = CGColor(red: CGFloat(redValue/255), green: CGFloat(greenValue/255), blue: CGFloat(blueValue/255), alpha: 255)
 }

注意:不要忘记为三个文本字段中的每一个正确设置委托!

答案 1 :(得分:0)

我认为你可以这样做:

@IBAction func redValue(_ sender: AnyObject) {
     yourView.backgroundColor = UIColor(colorLiteralRed: readValue/255, green: greenValue/255, blue: blueValue/255, alpha: 1)
}