我有一个 UITableViewController
及其默认的 UITableView
。我开始用手指慢慢拖动 table 进行滚动,即不要用手指轻弹它。每次表格在屏幕上移动时,都会调用 Controller 的 scrollViewDidScroll
方法;当满足我指定的某些条件时,对 scrollViewDidScroll
的调用之一会使用 performSelector:withObject:afterDelay
安排稍后执行某些操作。
但是,我发现在我松开手指之前该操作不会执行。例如,如果我将 afterDelay 参数设置为 2 秒,但按住手指 5 秒,当我松开手指且操作执行时,就晚了 3 秒。有什么方法可以允许操作(更新 UI,因此必须在主线程中运行)在手指仍然靠在屏幕上时执行?
谢谢!
最佳答案
这是因为当 UIScrollView(UITableView 的父类(super class))滚动时,它会更改其运行循环,以便优先考虑 ScrollView 而不是应用程序正在执行的操作。这样做是为了确保滚动尽可能平滑。
尝试使用此版本的延迟方法:
- (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay inModes:(NSArray *)modes;
对于模式,我建议从包含以下内容的数组开始:
[[NSRunloop currentRunLoop] currentMode]
,
NSDefaultRunLoopMode
关于iphone - UITableView 被拖动时,performSelector 无法运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4230361/