Ich benutze Scroll View, um ein Bild zu scrollen. Ich verwende einen Schieberegler 1 - 26, um CGPoint von einem Array für x-Achsenpunkte abzurufen. Alles verhält sich wie erwartet und das Bild ist im Übergang glatt.Swift Scroll View mit Slider und MIDI
Ich habe auch eine Taste eingerichtet, die bei einem Tastendruck von 1 - 26 zählt und Schleifen, um CGPoint von einem Array für x-Achsenpunkte abzurufen. Alles verhält sich wie erwartet und das Bild ist im Übergang glatt.
Ich habe auch MIDI eingerichtet, das die Daten 1 - 26 basierend auf der Geschwindigkeit sendet, die an den Schieberegler gesendet wird, und der Schieberegler bewegt sich wie erwartet. Ich verwende auch MIDI, um CGPoint von einem Array für x-Achsenpunkte abzurufen. Leider obwohl es will zeigt folgende Bilder scrollen, was passiert, nur 4 Bilder zu sehen bekommen, wie es rollt und man kann durch den beweglichen Schieber sagen, wenn sie
Ich bin sehr zuversichtlich erscheinen, dass die Midi funktioniert richtig, da ich es immer benutze, um von Arrays zu lesen. Ich habe auch versucht, den Knopf von Midi eine Art virtuelle Presse auszulösen. Dies funktioniert wie erwartet, zeigt aber dasselbe wie das Triggern direkt von Midi. Es scheint, als sei alles in Ordnung, solange die Schriftrolle von einer IB-Komponente stammt.
unter MIDI-Kontrolle der Bildlaufleiste stottert auch, aber wenn ich
clipView.wantsLayer = true
Das Bild scrollen nicht unter midi gesetzt, aber die Bildlaufleiste bewegt sich wie erwartet. Obwohl der Schieberegler und die Schaltfläche wie erwartet funktionieren.
Ich habe auch alle Dinge ausprobiert, die im playMidi kommentiert wurden. Außerdem versuchen Sie alle verschiedenen Parameter in der IB-Sektion.
Ich bin an einem Punkt, wo ich wirklich mit etwas Hilfe bitte tun könnte. Hier ist mein Code, der hoffentlich auch erklärt, was ich versucht habe. Ich habe auch verschiedene versucht
needsDisplay = true
auf allen Ansichten
Xcode 8 swift3 OSX nicht iOS
Vielen Dank für Ihre Zeit
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