2016-03-22 7 views
-1

Я работаю с комплектом спрайтов для проекта OS X, и я не мог понять, как приостановить цикл while до щелчка мыши. Я хочу что-то вроде этого:Подождите, пока мышь щелкните внутри, пока цикл

while (i < 50){ 
    print(i) 
    i += 1 
    waitForMouseClick() 
} 
+0

Это заблокирует основной поток, и ваше приложение не сможет получить щелчок мышью. – EmilioPelaez

+0

Итак, есть ли у вас какие-либо предложения по достижению такого поведения? – ergbil

+1

Поведение, которое вы ищете, немного сложное. Что вам нужно сделать, так это поддерживать цикл основного события вашего приложения, чтобы события мыши отправлялись в вашу программу и в то же время отслеживали контекст вашего цикла. По большому счету кажется, что вам нужно потратить некоторое время на изучение немного больше об обработке событий ОС. Это или вам нужно предоставить более широкий контекст в вашем вопросе о том, какой эффект вы пытаетесь выполнить. –

ответ

1

Я решил использовать его с использованием фоновой очереди GCD и семафора. Может быть полезно для других людей, читающих это.

// 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) 
} 
Смежные вопросы