2017-05-01 9 views
11

私はwave_mode_sliderと呼ばれる私のmacosアプリケーションにNSSliderがあります。私がしようとしているのは、入力時にスライダーの値を更新することです。だから、私がやったことはこれです:意図したとおりにnsslider.integerValueは値を更新する前に別のアプリにフォーカスする必要があります

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

私がtrueにスライダーの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) 

これは、あちこちに私はそれは私がちょうど、とすぐに私はスレッドに関するWillekeさんのコメントを見たように、かなり簡単だった最終的には価値

+0

セルを交換しないと機能しますか? – Willeke

+0

@Willeke nope、私は同じ出力を得ます –

+0

私はあなたのコードを試して、それは動作します。おそらく問題はあなたのコードのどこかにあるでしょう。どこから値を設定しますか? – Willeke

答えて

4

を得るメートルでありますメインスレッドを使用して値を設定しました。

DispatchQueue.main.async { 
    mySelf.wave_mode_slider?.floatValue = ("\(params[2])" as NSString).floatValue 
} 
関連する問題