停止NSScrollView只在特定的值 - 像UIScrollView的分页(Stop NSScr

2019-08-16 15:23发布

我使用的SDK 10.7的部署目标在Mac OS X应用程序的工作。 一个NSScrollView包含图像缩略图的水平列表。 这是在滚动型的中心的缩略图表示被示出的滚动型下方以全尺寸所选择的图像。 这工作很相似的Finder中盖流量,旁边,在我的应用程序中的图像不流畅,但只是滚动了。

我想限制滚动停止,只有当一个缩略图恰恰是在中心。 所述的NSView方法adjustScroll:没有办法了。 这将禁用“平滑”滚动,让滚动型跳从一个缩略图下。

我需要某种动作/回调的告诉我,滚动型成品滚动。 我可以比检查位置确定(如果缩略图是在中心)或向后滚动/前进到最近的缩略图。 但NSScrollView不提供这样的回调。

我试图观察ScrollViews contenView的框架的变化。 Evertime框架的变化,我开始一个定时器。 如果触发前的定时器没有启动我以为滚动停止。 这不很好地工作。 如果只是短时间滚动stopps(例如,由于手指移动到另做滑动手势)的下一个滚动与位置的修正干扰。

iOS的下使用UIScrollView的解决不会有任何问题这个任务。 对于NSScrollView类似的寻呼功能将是一个完美的解决方案。

是否有任何人知道如何解决这个问题?

非常感谢你!

Answer 1:

您可以使用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部署目标的选项。



文章来源: Stop NSScrollView only on specific values - Like UIScrollView paging