将当前线程NSRunLoop设置为以某种模式运行的正确方法是什么,直到我决定停止它为止?

时间:2012-05-23 20:25:54

标签: ios uiscrollview nsrunloop

我想模仿UIScrollView行为,当你拖动scrollView时当前线程RunLoop模式更改为UITrackingRunLoopMode,并在停止拖动时返回NSDefaultRunLoopMode。

我想用我自己的班级来做,但拖着视图......现在我正在使用这段代码

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

当我停止拖动时,_draggingView更改为nil,因此我停止在该模式下循环。是否有更优雅/更好的方式来做到这一点?

UIScrollView是如何做到的?输入源?

谢谢

2 个答案:

答案 0 :(得分:3)

您可以使用CFRunLoopStop强制运行循环返回。

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

答案 1 :(得分:-1)

您可以使用 Decelerated 方法。

- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView

拖动滚动视图后,它开始减速,因此,这些方法对您有用。