2012-05-23 13 views
10

Tôi muốn bắt chước hành vi UIScrollView trong đó chủ đề hiện tại Chế độ RunLoop thay đổi thành UITrackingRunLoopMode khi bạn kéo scrollView và quay lại NSDefaultRunLoopMode khi bạn ngừng kéo.Cách chính xác để thiết lập luồng NSRunLoop hiện tại chạy ở chế độ nhất định cho đến khi tôi quyết định dừng nó là gì?

Tôi muốn làm điều đó với lớp của riêng tôi, mặc dù, kéo xung quanh quan điểm ... Ngay bây giờ tôi đang sử dụng mã này

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

Khi tôi ngừng kéo, _draggingView thay đổi để nil vì vậy tôi dừng vòng lặp ở chế độ đó. Có cách nào thanh lịch/tốt hơn để thực hiện việc này không?

UIScrollView hoạt động như thế nào? Nguồn đầu vào?

Cảm ơn bạn

+0

Tôi sợ rằng không thể thay đổi chế độ vòng lặp chạy mà không sử dụng một số API riêng tư. Bạn có thể xây dựng thêm những gì bạn đang cố gắng để làm gì? – sergio

+0

tại sao bạn muốn thay đổi chế độ của runloop? là có bất kỳ vấn đề thực sự hoặc bạn muốn tìm hiểu thêm về runloop? – Tushar

Trả lời

3

Bạn có thể sử dụng CFRunLoopStop để buộc vòng lặp chạy trở lại.

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

Tôi không muốn dừng runLoop. Tôi chỉ muốn thay đổi chế độ. – LocoMike

+0

Bạn không thể thay đổi chế độ. Bạn chạy nó trong một chế độ. Khi bạn muốn chạy trong một chế độ khác, bạn dừng chạy hiện tại và bắt đầu lại trong chế độ mới (hoặc chỉ trả về và để cho lời gọi bên ngoài của 'resume CFRunLoopRun'). –

-1

Bạn có thể sử dụng giảm tốc phương pháp.

- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView 

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView 

Sau khi kéo chế độ xem cuộn, nó bắt đầu giảm tốc, vì vậy, các phương pháp này có thể được sử dụng cho bạn.

+0

Không, điều đó không sử dụng. Tôi không có UISCrollView, tôi chỉ muốn thay đổi NSRunLoop của chủ đề chính để làm việc trong UITrackingRunLoopMode bất cứ khi nào tôi muốn (Cũng giống như UIScrollView hiện khi bạn kéo). Nhưng dù gì cũng cảm ơn. – LocoMike

+0

Tôi nghĩ rằng nó sai tôi nghĩ, tôi dispiace ..! –

Các vấn đề liên quan