拖动UITableView时,performSelector无法运行?

sha*_*ter 2 iphone cocoa-touch uitableview nsrunloop

我有一个UITableViewController默认值UITableView.我开始用手指慢慢拖动桌子滚动,即不用手指轻弹.每次表格在屏幕上移动时,scrollViewDidScroll都会调用控制器的方法; 在满足我指定某些情况下,这些调用的一个scrollViewDidScroll用途performSelector:withObject:afterDelay安排在稍后的时间有所行动.

但是,我发现在我松开手指之前动作才会执行.例如,如果我将afterDelay参数设置为2秒,但是按住我的手指5秒钟,当我松开手指并且动作执行时间太晚时间为3秒.是否有任何方法允许操作(即更新UI,因此必须在主线程中运行)在手指仍在屏幕上时执行?

谢谢!

Pie*_*ult 8

这是因为当UIScrollView(UITableView的超类)滚动时,它会更改其runloop,以便在应用程序正在执行的任何操作上优先处理scrollView.发生这种情况是为了确保滚动尽可能顺畅.

尝试使用此版本的延迟方法:

- (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay inModes:(NSArray *)modes;
Run Code Online (Sandbox Code Playgroud)

为模式,我建议以含有如下内容的数组: [[NSRunloop currentRunLoop] currentMode], NSDefaultRunLoopMode

  • 感谢您的回答!它真的帮助了我.但是数组略有不同:[NSArray arrayWithObject:NSRunLoopCommonModes] (2认同)