1

您将如何在调用某些方法之间添加延迟?

这是我只想每秒触发 30 次的代码:

- (void) scrollViewDidScroll: (UIScrollView*)scrollView {
   [self performSelector:@selector(needsDisplay) withObject:nil afterDelay:0.033];
}

- (void) needsDisplay {
    [captureView setNeedsDisplay];
}

如果我这样离开它,它只会在用户停止滚动后被调用。

我想要做的是在用户滚动时调用该方法,但每次调用之间有 33 毫秒的延迟。

4

4 回答 4

4

有不同的委托方法会调用不同的场合。此方法仅在用户完成滚动时调用。因此,您可以根据需要执行某些任务。如果您想在滚动时或滚动之前做一些事情,您可以使用不同的委托方法。根据您的功能选择以下之一。

– 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 代表应该在应该调用的时候调用......否则你会导致一些故障。

于 2013-11-11T09:37:06.370 回答
0

委托方法将被调用,您不能在其中设置限制。我认为对您来说一个不错的选择是将操作添加到 中NSOperationQueue,并且由于您一次又一次地调用相同的选择器,因此请确保同时在队列中最多保留 30 个操作。NSOperationQueue 类参考

于 2013-11-11T09:43:56.800 回答
0

由于我找不到解决方案,并且其他滚动视图委托方法也不好,我通过根据滚动视图的内容偏移量进行限制来做到这一点,正如评论中所建议的那样。(例如:仅当用户滚动超过 3 个像素时才调用它)。

这是一个不错的解决方案,因为我怀疑有人可以每秒滚动超过 90 像素,并且仍然可以阅读这 90 像素之间的文本。

if (ABS(self.oldOffset.y - webView.scrollView.contentOffset.y) > 3) {
    [captureView setNeedsDisplay];
}
于 2013-11-11T10:07:57.667 回答
-1

无法控制委托方法的调用,也没有参数来设置委托方法应该调用的频率或设置滚动视图的灵敏度,

你无法控制它。

剩下的唯一一件事就是忽略调用(如果不需要,则在函数调用的开头返回)或者处理调用..

于 2013-11-11T09:49:58.950 回答