仅在特定值上停止 NSScrollView - 如 UIScrollView 分页



我正在使用SDK 10.7作为部署目标开发Mac OS X应用程序。NSScrollView 包含图像缩略图的水平列表。位于滚动视图中心的缩略图指示所选图像,该图像以全尺寸显示在滚动视图下方。这与 Finder Cover-Flow 非常相似,此外,我的应用程序中的图像不会流动,而只是滚动离开。

我想将滚动限制为仅在缩略图正好位于中心时才停止。NSView 方法 adjustScroll: 不是解决方案。这将禁用"平滑"滚动,并让 ScrollView 从一个缩略图跳转到下一个缩略图。

我需要某种操作/回调来告诉我 ScrollView 已完成滚动。我可以检查位置是否正常(如果缩略图位于中心)或向后/向前滚动到最近的缩略图。但是NSScrollView不提供这样的回调。

我试图观察ScrollViews框架的变化。每当帧更改时,我都会启动计时器。如果计时器在触发之前没有重新启动,我假设滚动停止了。这效果不是很好。如果滚动仅在短时间内停止(例如,因为移动手指以执行另一个滑动手势),则下一次滚动会干扰位置的校正。

在iOS下使用UIScrollView可以毫无问题地解决此任务。NSScrollView的类似分页功能将是一个完美的解决方案。

有人知道如何解决这个问题吗?

谢谢!

您可以使用

NSScrollViewDidEndLiveScrollNotification

NSScrollView* scrollView;
const CGFloat interval = 100;
[[NSNotificationCenter defaultCenter]
 addObserverForName:NSScrollViewDidEndLiveScrollNotification
 object:scrollView
 queue:nil
 usingBlock:^(NSNotification* notification) {
     CGFloat offset = scrollView.contentView.bounds.origin.y;
     offset = round(offset / interval) * interval;
     [scrollView.contentView.animator setBoundsOrigin:NSMakePoint(0, offset)];
 }];

可以使用NSAnimationContext来调整动画的持续时间和计时。


注意:根据文档,此通知是在 10.9 中引入的,因此它不是原始问题中提到的 10.7 部署目标的选项。

最新更新