gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 20:59:09 25 4
gpt4 key购买 nike

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

我想限制滚动仅在缩略图正好位于中心时停止。 NSView 方法 调整滚动:是没有解决办法。这将禁用“平滑”滚动并让 ScrollView 从一个缩略图跳到下一个。

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

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

在 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 部署目标的选项。

关于macos - 仅在特定值上停止 NSScrollView - 像 UIScrollView 分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14609793/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com