如何在被调用的某个方法之间添加延迟?
这是我的代码,我想每秒只触发30次:
- (void) scrollViewDidScroll: (UIScrollView*)scrollView {
[self performSelector:@selector(needsDisplay) withObject:nil afterDelay:0.033];
}
- (void) needsDisplay {
[captureView setNeedsDisplay];
}
如果我这样离开它,它只会在用户停止滚动后调用。
我想要做的是在用户滚动时调用该方法,但每次调用之间的延迟为33毫秒。
答案 0 :(得分:4)
有不同的委托方法可以调用不同的occausion。此方法仅在用户完成滚动时调用。所以如果你愿意,你可以执行一些任务。如果你想在滚动或滚动之前做一些事情,你可以使用不同的委托方法。根据您的功能选择以下选项之一。
– scrollViewDidScroll:
– scrollViewWillBeginDragging:
– scrollViewWillEndDragging:withVelocity:targetContentOffset:
– scrollViewDidEndDragging:willDecelerate:
– scrollViewShouldScrollToTop:
– scrollViewDidScrollToTop:
– scrollViewWillBeginDecelerating:
– scrollViewDidEndDecelerating:
有关这些代表的详细说明,请点击此链接。 https://developer.apple.com/library/ios/documentation/uikit/reference/uiscrollviewdelegate_protocol/Reference/UIScrollViewDelegate.html 代表应该在应该的时候打电话......否则你会引起一些小故障。
答案 1 :(得分:0)
委托方法将被调用,您无法设置限制。我认为一个很好的选择是在NSOperationQueue
中添加操作,并且由于您一次又一次地调用相同的选择器,请确保您同时在队列中最多只保留30个操作。 NSOperationQueue Class Reference
答案 2 :(得分:0)
由于我找不到解决方案,而其他滚动视图委托方法也不好,我是通过基于滚动视图的内容偏移进行限制来实现的,如评论中所建议的那样。 (例如:如果用户滚动超过3个像素,则仅调用它)。
这是一个不错的解决方案,因为我怀疑有人可以每秒滚动超过90个像素,而STILL会在这90个像素之间读取文本。
if (ABS(self.oldOffset.y - webView.scrollView.contentOffset.y) > 3) {
[captureView setNeedsDisplay];
}
答案 3 :(得分:-1)
无法控制委托方法的调用,也没有参数来设置委托方法调用的频率或设置scrollview的灵敏度,
你无法控制它。
唯一剩下的就是忽略调用(如果你不需要那么在函数调用开始时返回)或者处理调用..