2017-05-01 18 views
11

अद्यतन करने से पहले किसी अन्य ऐप पर फ़ोकस करने की आवश्यकता है मेरे पास wave_mode_slider नामक मेरे मैकोज़ ऐप में NSSlider है। मैं जो करने की कोशिश कर रहा हूं वह इनपुट पर कहा गया स्लाइडर का मान अपडेट कर रहा है। तो, क्या मैंने किया था यह है:nsslider.integer वैल्यू मुझे मूल्य

self.wave_mode_slider?.integerValue = ("\(params[2])" as NSString).integerValue 

इस इनपुट के मूल्य के स्लाइडर (सफेद डॉट) का मान सेट के रूप में इरादा। हालांकि, मुझे कोई वास्तविक परिणाम देखने से पहले, मुझे एप्लिकेशन के बाहर क्लिक करना होगा, जिससे स्लाइडर का सफेद बिंदु इसके नए मान पर कूदने का कारण बनता है। जैसा कि यहां दिखाया गया है: enter image description here

क्या स्लाइडर अपडेट तुरंत करने का कोई तरीका है?

मेरे स्लाइडर इस तरह बनाई गई है:

self.wave_mode_slider = NSSlider(frame:CGRect(x: 10, y: 100, width: 20, height: 300)) 
    self.wave_mode_slider?.cell = OWOWSliderVertical() 
    self.wave_mode_slider?.maxValue = 127 
    self.wave_mode_slider?.target = self 
    self.view?.addSubview(self.wave_mode_slider!) 

मैं सच करने के लिए स्लाइडर का isContinuous गुण सेट करने की कोशिश की, लेकिन वह परिणाम को बदलने doen't।


संपादित करें:

var midiClient : MIDIClientRef = 0 
    var inPort : MIDIPortRef = 0 
    let observer = UnsafeMutableRawPointer(Unmanaged.passUnretained(self).toOpaque()) 

     MIDIClientCreate("WobClient" as CFString, nil, nil, &midiClient) 
     MIDIInputPortCreate(midiClient, "WobClient_InPort" as CFString, { 
      (pktList: UnsafePointer<MIDIPacketList>, readProcRefCon: UnsafeMutableRawPointer?, srcConnRefCon: UnsafeMutableRawPointer?) -> Void in 
      let packetList : MIDIPacketList = pktList.pointee 
      var packet : MIDIPacket = packetList.packet 
      let mySelf = Unmanaged<Wob>.fromOpaque(srcConnRefCon!).takeUnretainedValue() 
      for _ in 1...packetList.numPackets { 
       let bytes = Mirror(reflecting: packet.data).children 
       var params : [UInt64] = [] 

       var i = packet.length 
       for (_, attr) in bytes.enumerated() { 
        let string = String(format: "%02X ", attr.value as! UInt8) 
        params.append(UInt64(strtoul(string, nil, 16))) 
        i -= 1 

        if (i <= 0) { 
         break 
        } 
       } 

//    print(("\(params[2])" as NSString).integerValue) 
       mySelf.setWaveSliderValue(value: ("\(params[2])" as NSString).integerValue) 
       packet = MIDIPacketNext(&packet).pointee 
      } 

     }, nil, &inPort) 

     MIDIPortConnectSource(inPort, self.source, observer) 

यह इधर-उधर मीटर मैं कहाँ मूल्य

+0

यदि आप सेल को प्रतिस्थापित नहीं करते हैं तो यह काम करता है? – Willeke

+0

@ विलेके नोप, मुझे एक ही आउटपुट मिलता है –

+0

मैंने आपके कोड की कोशिश की और यह काम करता है। शायद आपके कोड में समस्या कहीं और है। आप मूल्य कहां से सेट करते हैं? – Willeke

उत्तर

4

प्राप्त अंत में के रूप में मैं सूत्रण के बारे में Willeke की टिप्पणी देखा कि यह रूप में जल्द ही बहुत आसान था, है, मैं बस मूल्य को सेट करने के लिए मुख्य थ्रेड का उपयोग किया गया:

DispatchQueue.main.async { 
    mySelf.wave_mode_slider?.floatValue = ("\(params[2])" as NSString).floatValue 
} 
संबंधित मुद्दे