2012-05-23 7 views
10

Chcę naśladować zachowanie UIScrollView, w którym bieżący wątek Tryb RunLoop zmienia się na UITrackingRunLoopMode po przeciągnięciu scrollView, i z powrotem do NSDefaultRunLoopMode po zatrzymaniu przeciągania.Jaki jest poprawny sposób ustawiania bieżącego wątku NSRunLoop tak, aby działał w określonym trybie, dopóki nie zdecyduję się go zatrzymać?

Chcę to zrobić z własnej klasy, choć przeciągając wokół widoki ... Teraz używam tego kodu

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

Kiedy przestaną przeciągania _draggingView zmiany do zera, więc przestają zapętlenie w tym trybie. Czy istnieje bardziej elegancki/lepszy sposób robienia tego?

Jak działa UIScrollView? Źródła wejściowe?

Dziękuję

+0

Obawiam się, że nie można zmienić trybu uruchamiania pętli bez korzystania z prywatnego interfejsu API. Czy mógłbyś rozwinąć więcej tego, co próbujesz zrobić? – sergio

+0

dlaczego chcesz zmienić tryb runloopa? czy jest jakiś prawdziwy problem, czy chcesz dowiedzieć się więcej o runloopie? – Tushar

Odpowiedz

3

Możesz użyć CFRunLoopStop, aby wymusić powrót pętli uruchamiania.

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

Nie chcę zatrzymać runLoopa. Chcę tylko zmienić tryb. – LocoMike

+0

Nie można zmienić trybu. Uruchomisz go w trybie. Jeśli chcesz uruchomić w innym trybie, zatrzymaj bieżący przebieg i rozpocznij ponownie w nowym trybie (lub po prostu powróć i pozwól na wznowienie zewnętrznego wywoływania 'CFRunLoopRun'). –

-1

Można użyć spowolnił metod.

- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView 

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView 

Po przeciągnąć widok przewijania, to zaczyna zwalnia, więc metody te mogą być przydatne dla Ciebie.

+0

Nie, to nie ma sensu. Nie mam UISCrollView, po prostu chcę zmienić NSRunLoop głównego wątku do pracy w UITrackingRunLoopMode, kiedy tylko chcę (tak jak robi to UIScrollView podczas przeciągania). Ale i tak dzięki. – LocoMike

+0

Myślałem, że to źle, myślę, że wyrzekłem się ...! –

Powiązane problemy