2012-05-23 6 views
10

Desidero simulare il comportamento di UIScrollView in cui la modalità RunLoop corrente del thread passa a UITrackingRunLoopMode quando si trascina scrollView e si torna a NSDefaultRunLoopMode quando si interrompe il trascinamento.Qual è il modo corretto di impostare il thread corrente NSRunLoop in modo che venga eseguito in una determinata modalità finché non decido di interromperlo?

voglio farlo con la mia classe, però, trascinando vista ... In questo momento sto usando questo codice

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

Quando smetto di trascinamento, _draggingView modifiche a zero così mi fermo looping in quella modalità. C'è un modo più elegante/migliore per farlo?

Come funziona UIScrollView? Fonti di input?

Grazie

+0

Temo che non sia possibile modificare la modalità ciclo di esecuzione senza utilizzare alcune API private. Potresti elaborare di più cosa stai cercando di fare? – sergio

+0

perché vuoi cambiare la modalità del runloop? c'è qualche problema reale o vuoi saperne di più sul runloop? – Tushar

risposta

3

È possibile utilizzare CFRunLoopStop per forzare il ritorno di un ciclo di esecuzione.

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

Non voglio interrompere un runLoop. Voglio solo cambiare la modalità. – LocoMike

+0

Non è possibile modificare la modalità. Lo esegui in una modalità. Quando vuoi correre in una modalità diversa, interrompi l'esecuzione corrente e ricomincia nella nuova modalità (o semplicemente ritorna e lascia che l'invocazione esterna di 'CFRunLoopRun' riprenda). –

-1

È possibile utilizzare decelerato metodi.

- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView 

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView 

Dopo ci trasciniamo la vista di scorrimento, si inizia a decelerare, quindi, questi metodi potrebbe essere utile a voi.

+0

No, non ha senso. Non ho UISCrollView, voglio solo cambiare NSRunLoop del thread principale per lavorare in UITrackingRunLoopMode ogni volta che voglio (Proprio come fa UIScrollView quando si trascina). Ma grazie comunque. – LocoMike

+0

Mi è sembrato sbagliato Penso, mi dispiace ..! –

Problemi correlati