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

标签 ios uiscrollview nsrunloop

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

不过,我想用我自己的类来做,拖拽 View ...现在我正在使用这段代码

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

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

UIScrollView 是怎么做到的?输入源?

谢谢

最佳答案

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

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

关于ios - 在我决定停止它之前,将当前线程 NSRunLoop 设置为以某种模式运行的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10727306/

相关文章:

c# - 如何修复对象旋转并使其在 Vuforia 中垂直?

ios - 在 iOS 13 中关闭 UIScrollView 指示器擦洗

objective-c - NSRunLoop 因 NSTimer 和任何输入而卡住

objective-c - UI 滚动时应用程序停止从套接字接收数据

ios - Swift countElements() 在计数标志 emoji 时返回不正确的值

ios - 重写 Swift 的失败初始化器

ios - 字典对象无法转换为 JSON 对象 objective-c

ios - iOS 中 ScrollView 中的可扩展 UIView

ios - UIScrollView 中的 ViewController 约束,使用 Storyboard

objective-c - setNeedsLayout 如何工作?