And*_*ord 15 macos nsscrollview scroll-paging
我正在使用SDK 10.7作为部署目标的Mac OS X应用程序.NSScrollView包含图像缩略图的水平列表.位于ScrollView中心的缩略图表示所选图像,该图像以完整大小显示在ScrollView下方.这与Finder Cover-Flow非常相似,除了我的应用程序中的图像不会流动但只是向外滚动.
我想限制滚动仅在缩略图正好位于中心时停止.NSView方法adjustScroll:没有解决方案.这将禁用"平滑"滚动并让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)];
}];
Run Code Online (Sandbox Code Playgroud)
您可以用来NSAnimationContext调整动画的持续时间和时间。
注意:根据文档,此通知是在 10.9 中引入的,因此它不会成为原始问题中提到的 10.7 部署目标的选项。
| 归档时间: |
|
| 查看次数: |
827 次 |
| 最近记录: |