我正在尝试构建一个无限的 NSScrollView,即可以在任一方向无限滚动的滚动视图。这是通过具有固定尺寸的滚动视图来实现的,一旦它太靠近任一边缘,就会“重新居中”,并跟踪在重新居中时更新的额外无限偏移。如果我没记错的话,Apple 甚至在 iOS 的 WWDC 视频中演示了这种方法。
在 iOS 上一切正常。我执行中心化逻辑-scrollViewDidScroll:
,它甚至在滚动运动正在减速而不破坏减速时也能工作。
现在适用于 Mac 版本。让我告诉你,我对 Mac 开发还很陌生,所以我可能根本没有在正确的地方执行这些操作。我目前在-reflectScrolledClipView:
. 但是,当我立即执行移动操作时,滚动视图会跳转到我想要的两倍(在本例中为 4000)。如果我稍微延迟该方法,它会按预期工作。
- (void)reflectScrolledClipView:(NSClipView *)cView
{
[self recenteringLogic];
[super reflectScrolledClipView:cView];
}
- (void)recenteringLogic
{
CGFloat offset = self.documentVisibleRect.origin.y;
if (offset > 6000) {
// This makes the scroll view jump to ~4000 instead of 5000.
[self performSelector:@selector(move) withObject:nil];
// This works, but seems wrong to me
// [self performSelector:@selector(move) withObject:nil afterDelay:0.0];
}
}
- (void)move
{
[self.documentView scrollPoint:NSMakePoint(0, 4000)];
}
关于如何实现我想要的行为的任何想法?