使用滾動查看滾動圖片。我正在使用滑塊1 - 26從x軸點的數組中檢索CGPoint。一切都如預期的那樣運行,圖像平滑過渡。滑塊和MIDI快速滾動查看
我還設置了一個按鈕,當按下按鈕從1到26計數並循環以從x軸點的陣列檢索CGPoint。一切都如預期的那樣運行,圖像平滑過渡。
我還設置了MIDI發送數據1 - 26基於速度這發送到滑塊,滑塊移動如預期。我還使用MIDI從x軸點數組中檢索CGPoint。不幸的是,雖然它要滾動下面的圖片顯示會發生什麼你只有看到3張圖片,因爲它滾動,你可以通過移動滑塊告訴當他們出現
我非常有信心的是,迷笛工作正常,因爲我一直使用它來讀取數組。我也曾嘗試觸發Midi的一種虛擬媒體按鈕。這按預期工作,但顯示與從MIDI直接觸發相同。似乎一切都很好,只要滾動源自IB組件即可。
根據MIDI控制滾動條也口吃,但如果我設置
clipView.wantsLayer = true
如預期圖片不下MIDI但滾動條移動滾動。即使滑塊和按鈕按預期工作。
我也嘗試了所有在playMidi中註釋掉的東西。以及在IB部分嘗試所有不同的參數。
我在一個點,我真的可以做一些幫助,請。 這是我的代碼,希望也解釋了我所嘗試過的。 我也嘗試過各種
needsDisplay = true
上的所有觀點
的Xcode 8 Swift3 OSX不是的iOS
感謝您對您的時間
import Cocoa
import CoreMIDI
class MainWindowController: NSWindowController {
static var subWindowController: MainWindowController!
var pointArray:[Double] = [99.00,0.00,40.00,80.00,120.00,160.00,200.00,240.00,280.00,320.00,360.00,400.00,440.00,480.00,520.00,560.00,600.00,640.00,680.00,720.00,760.00,800.00,840.00,880.00,920.00,960.00,1000.00]
@IBOutlet weak var scrollView: NSScrollView!
@IBOutlet weak var clipView: NSClipView!
@IBOutlet weak var ImageView: NSImageView!
@IBOutlet var scrollerBar: NSScroller!
@IBOutlet weak var sliderControl: NSSlider!
var myPointer = CGPoint.init(x: 0.0, y: 0.0)
var fromArray:Double = 0.0
var buttonCount = 0
override func windowDidLoad() {
super.windowDidLoad()
MainWindowController.subWindowController = self // USED for midi
//Initialize midi client
var midiClient: MIDIClientRef = 0;
var inPort:MIDIPortRef = 0;
var src:MIDIEndpointRef = MIDIGetSource(0);
MIDIClientCreate("MidiTestClient" as CFString, nil, nil, &midiClient);
MIDIInputPortCreate(midiClient, "MidiTest_InPort" as CFString, MyMIDIReadProc, nil, &inPort);
MIDIPortConnectSource(inPort, src, &src);
//Set paramameters
scrollerBar.doubleValue = 0.9
let scrollViewSize = NSSize(width: 287, height: 119)
scrollView.setFrameSize(scrollViewSize)
let scrollViewColor = CGColor(red: 0.0, green: 0.0, blue: 0.9, alpha: 0.5)
scrollView.wantsLayer = false
scrollView.layer?.backgroundColor = scrollViewColor
scrollView.drawsBackground = false
let clipViewSize = NSSize(width: 1274, height: 88)
clipView.setFrameSize(clipViewSize)
let clipViewColor = CGColor(red: 0.0, green: 0.0, blue: 0.9, alpha: 0.5)
clipView.wantsLayer = false //If true image freezes but scoller moves with midi
clipView.layer?.backgroundColor = clipViewColor
clipView.drawsBackground = false
let ImageViewSize = NSSize(width: 1274, height: 87)
ImageView.setFrameSize(ImageViewSize)
/* let ImageViewColor = CGColor(red: 0.0, green: 0.9, blue: 0.0, alpha: 0.5)
ImageView.wantsLayer = false
ImageView.layer?.backgroundColor = ImageViewColor*/
}//EO Overide
func playMidi(count:Int){
//print("MIDi",count)
let fromCountIndex = count // Gets 1 to 26 from midi
//Gets double from Array 1 to 26 on Index == 0.0 to 960.0
fromArray = pointArray[fromCountIndex]
/*SCROLL BAR THINGS I HAVE TRIED*/
let scrollerValue = fromArray/960
scrollerBar.doubleValue = scrollerValue
/* scrollerBar.display()
scrollerBar.isContinuous = true */
/*CLIP VIEW SCROLL FROM ARRAY TRIGGERED BY MIDI */
myPointer = CGPoint(x:fromArray,y:0.0)
clipView.scroll(myPointer)
/*scrollView.scroll(clipView, to: myPointer)*/
/*THIS FAKES A BUTTON FIRE BUT STILL SAME PROBLEM*/
/* let mySelector = #selector(myButton(_:))
myButton(mySelector as AnyObject)*/
/* DISPLAY VIEWS I HAVE TRIED*/
// scrollView.scrollsDynamically = true
/*MOVES THE SLIDER USING MIDI*/
sliderControl.integerValue = count
}//eo playMidi
@IBAction func myButton(_ sender: AnyObject) {
fromArray = pointArray[buttonCount]
myPointer = CGPoint(x:fromArray,y:0.0)
clipView.scroll(myPointer)
buttonCount = buttonCount + 1
if (buttonCount > 26){buttonCount = 0}
print("buttonCount",buttonCount)
}
@IBAction func mySlider(_ sender: AnyObject) {
let fromSlider = sender.integerValue * 1
//Gets double from Array 1 to 26 on Index == 0.0 to 960.0 on array set to 40 when using slider moves scroll bar
fromArray = pointArray[fromSlider]
myPointer = CGPoint(x:fromArray,y:0.0)
clipView.scroll(myPointer)
print("fromSlider",fromSlider)
}
}//EnD oF thE wORld