2016-10-28 5 views
0

Ich erstelle eine einfache benutzerdefinierte NSView, die es dem Benutzer ermöglicht, 3 Textfelder jeweils für R, G und B-Werte jeweils einzugeben. Ich habe diese Frage bereits referenziert und die Antwort here gesetzt - sie rechnet nur bis Swift 2.0. Kennt also jemand die richtige Technik, um denselben Effekt in Swift 3.0 zu erhalten? Ich kann anscheinend nichts bekommen, was ich mache, um zu arbeiten. Ich bekomme immer Fehler aller Art.Ändern der Farbe von NSView

Hier ist die aktuelle Technik, die ich bin mit (Dies scheint zu funktionieren ... aber es wird nicht für die anderen 2 RGB Werte berücksichtigen, da es in den @IBAction verwendet wird):

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

} 

Antwort

0

Ich denke, Sie können das nur tun:

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

Dies wird nicht funktionieren. Swift 3 erfordert die Verwendung von '.layer? .backgroundColor', bevor Sie die Farbe anpassen können. Es sei denn, es gibt eine andere Möglichkeit, dies zu tun. Aber das ist der einzige Weg, wie ich es zum Laufen bringen konnte – KSigWyatt

1

Wenn Sie die Hintergrundfarbe einer NSView jedes Mal den Wert von einer der drei R, G, B Textansichten Änderungen dynamisch ändern möchten, können Sie die controlTextDidChange(notification:) Delegatmethode verwenden könnte von NSTextField gekoppelt mit Ausgängen für jedes der drei Textfelder.

Die Methode wird jedes Mal ausgelöst, wenn eines der Felder geändert wird, und Sie verwenden es, um den Wert der RGB-Felder (über die Ausgänge) zu lesen und die Farbe entsprechend zu ändern.

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

Hinweis: Vergessen Sie nicht, den Delegaten für jedes der drei Textfelder richtig einzustellen!

+0

@KSigWyatt Nur neugierig, ob dies Ihnen in irgendeiner Weise hilft. –

+0

Ich entschied mich, in eine andere Richtung zu gehen. – KSigWyatt