Ich löste es mit einer GCD Hintergrundwarteschlange und einem Semaphor. Könnte für andere Leute, die das lesen, hilfreich sein.
// CREATE A BACKGROUND QUEUE AND SEMAPHORE
let bgQueue = dispatch_queue_create("myQueue", nil)
let semaphore = dispatch_semaphore_create(0)
override func didMoveToView(view: SKView) {
//DISPATCH CODE BLOCK TO QUEUE
dispatch_async(bgQueue, {
//THIS WILL GRAB YOUR SEMAPHORE
dispatch_semaphore_wait(self.semaphore, DISPATCH_TIME_NOW)
var i: Int = 0
while (i<50){
i += 1
//BLOCK
dispatch_semaphore_wait(self.semaphore, DISPATCH_TIME_FOREVER)
print(i)
}
})
}
override func mouseDown(theEvent: NSEvent) {
//RELEASE SEMAPHORE
dispatch_semaphore_signal(semaphore)
}
Das wird den Haupt-Thread blockieren und Ihre Anwendung wird den Mausklick nicht empfangen können. – EmilioPelaez
Haben Sie irgendwelche Vorschläge, um diese Art von Verhalten zu erreichen? – ergbil
Das Verhalten, nach dem Sie suchen, ist ein bisschen komplex. Sie müssen die Hauptereignisschleife Ihrer Anwendung so lange ausführen lassen, dass Mausereignisse an Ihr Programm gesendet werden, während Sie gleichzeitig den Kontext Ihrer Schleife verfolgen. Im Großen und Ganzen scheint es, dass Sie einige Zeit damit verbringen müssen, etwas mehr über die Ereignisbehandlung von Betriebssystemen zu lernen. Das oder Sie müssen in Ihrer Frage einen größeren Zusammenhang angeben, welchen Effekt Sie erzielen möchten. –