2012-05-23 5 views
10

Quiero imitar el comportamiento UIScrollView donde el modo RunLoop actual de subprocesos cambia a UITrackingRunLoopMode cuando arrastra el scrollView y vuelve a NSDefaultRunLoopMode cuando deja de arrastrar.¿Cuál es la forma correcta de configurar el hilo actual NSRunLoop para que se ejecute en un modo determinado hasta que decida detenerlo?

quiero hacerlo con mi propia clase, sin embargo, arrastrando vistas ... En este momento estoy usando el código

while (_draggingView && [[NSRunLoop currentRunLoop] runMode:UITrackingRunLoopMode beforeDate:[NSDate distantFuture]]); 

Cuando deje arrastrar, _draggingView cambios a cero por lo que dejan de bucle en ese modo. ¿Hay una manera más elegante/mejor de hacer esto?

¿Cómo está UIScrollView lo está haciendo? ¿Fuentes de entrada?

Gracias

+0

Me temo que no es posible cambiar el modo de ciclo de ejecución sin utilizar una API privada. ¿Podría explicar más qué está tratando de hacer? – sergio

+0

¿por qué quieres cambiar el modo del runloop? ¿Hay algún problema real o quieres aprender más sobre el runloop? – Tushar

Respuesta

3

Puede usar CFRunLoopStop para forzar la vuelta de un ciclo de ejecución.

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { 
    [super touchesEnded:touches withEvent:event]; 
    CFRunLoopStop(CFRunLoopGetMain()); 
} 
+1

No quiero detener un runLoop. Solo quiero cambiar el modo. – LocoMike

+0

No puede cambiar el modo. Lo ejecuta en un modo. Cuando desee ejecutar en un modo diferente, detenga la ejecución actual y comience de nuevo en el nuevo modo (o simplemente regrese y deje que la invocación externa de 'CFRunLoopRun' se reanude). –

-1

Puede utilizar desacelerado métodos.

- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView 

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView 

Después de que arrastramos la vista de desplazamiento, comienza a desacelerar, por lo tanto, estos métodos pueden serle útiles.

+0

No, eso no tiene uso. No tengo UISCrollView, solo quiero cambiar NSRunLoop del hilo principal para que funcione en UITrackingRunLoopMode cuando quiera (al igual que UIScrollView cuando arrastra). Pero gracias de cualquier manera. – LocoMike

+0

¡Pensé que estaba mal, creo, me dispiace ..! –

Cuestiones relacionadas