swift - 改变 NSView 的颜色

标签 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)

}

最佳答案

如果您想在每次三个 R、G、B TextView 之一的值发生变化时动态更改 NSView 的背景颜色,您可以使用 controlTextDidChange(notification:) 委托(delegate)NSTextField 的方法与三个文本字段中的每一个的导出相结合。

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

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

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

关于swift - 改变 NSView 的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40314500/

相关文章:

ios - 如何在调用 UIImagePickerController 后隐藏状态栏?

ios - swift 3 : Can not convert value of type 'int' to expected argument type 'DispatchQueue.GlobalQueuePriority'

swift - 当我从一个节点切换到另一个节点时,是否应该删除所有 SKSpriteNodes 和标签

ios - 如何创建一个按钮来更改 Swift 中的相机 View ?

xcode - XPC 服务 NSCocoaError 域

objective-c - 子类化 NSView 以具有透明背景

objective-c - 如何将图像设置到 NSCollectionView 中?

ios - 为什么 UITextField 不允许我添加边框颜色?

swift - 如何从 Annotation Callout Xcode 9 设置警报

macos - SMJobBless 失败,CFErrorDomainLaunchd 代码 9