Im utilisant Scroll View pour faire défiler une image. J'utilise un curseur 1 - 26 pour récupérer CGPoint d'un tableau pour les points de l'axe x. Tout se comporte comme prévu et l'image est lisse en transition.Swift Scroll View avec curseur et MIDI
J'ai également mis en place un bouton qui, lorsqu'il est pressé, compte de 1 à 26 et boucle pour récupérer CGPoint d'un tableau pour les points de l'axe x. Tout se comporte comme prévu et l'image est lisse en transition.
J'ai également mis en place un MIDI qui envoie les données 1 - 26 en fonction de la vélocité, cela est envoyé au curseur, et le curseur se déplace comme prévu. J'utilise également le MIDI pour récupérer CGPoint à partir d'un tableau pour les points de l'axe x. Malheureusement, bien qu'il veut faire défiler les images ci-dessous montre ce qui vous arrive obtenez seulement pour voir 4 images comme il défile et vous pouvez dire par le curseur en mouvement quand ils apparaissent
Je suis très confiant que le Midi fonctionne correctement car je l'utilise tout le temps pour lire des tableaux. J'ai aussi essayé de déclencher le bouton de Midi une sorte de presse virtuelle. Cela fonctionne comme prévu mais montre la même chose que de déclencher directement à partir de midi. Il semble que tout va bien tant que le parchemin provient d'un composant IB.
Sous Midi contrôlent la barre de défilement bégaie aussi, mais si je mets
clipView.wantsLayer = true
L'image ne défile pas sous midi, mais la barre de défilement se déplace comme prévu. Même si le curseur et le bouton fonctionnent comme prévu.
J'ai aussi essayé toutes les choses commentées dans le playMidi. Aussi bien essayer tous les différents paramètres dans la section IB.
Je suis à un point où je pourrais vraiment faire avec de l'aide s'il vous plaît. Voici mon code qui, je l'espère, explique aussi ce que j'ai essayé. J'ai également essayé divers
needsDisplay = true
sur toutes les vues
Xcode 8 swift3 OSX pas iOS
Merci pour votre temps
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