2016-10-28 9 views
0

私は単純なカスタムNSViewを作成しています。これにより、ユーザーはR、G、B値のそれぞれに3つのテキストフィールドを入力できます。私はすでにこの質問と回答のセットhereを参照しました - それはSwift 2.0までしか説明しません。だから、誰もこの同じ効果を得るための正しいテクニックを知っていますか?Swift 3.0?私は働くことを何とかしているようには見えません。私はあらゆる種類の誤りを続けています。NSViewの色を変更する

はここで私が使用している現在の技術だ(これは動作するようです...しかし、それは@IBActionに使われているので、それは、他の2つのRGB値を考慮していません):

//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

私は思いますあなたはちょうどそれを行うことができます:あなたは動的たびに3つのR、G、Bのテキストビューの変更のいずれかの値をNSViewのの背景色を変更したい場合は、controlTextDidChange(notification:)デリゲートメソッドを使用することができ

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

これは機能しません。 Swift 3では、色を調整する前に '.layer?.groundColor'を使用する必要があります。これを行う別の方法がない限り。しかし、これは私がそれを働かせることができた唯一の方法です。 – KSigWyatt

1

NSTextFieldカップル3つのテキストフィールドのそれぞれにアウトレットが付いています。

フィールドの1つが変更され、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) 
} 

注:3つのテキストフィールドのそれぞれに対してデリゲートを正しく設定することを忘れないでください。

+0

@KSigWyattこれが何らかの形であなたを助けているのであれば好奇心が強いです。 –

+0

私は別の方向に進むことに決めました。 – KSigWyatt

関連する問題