我正在创建一个简单的自定义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)
}
答案 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)
}