cocoa - 限制 Cocoa 中的滚动弹性(NSScrollView)

标签 cocoa mouseevent mousewheel appkit nsscrollview

我有一个 cocoa 应用程序,有十几个 ScrollView 。我喜欢这种弹性,尤其是在某些情况下,我实际上放置了某种“复活节彩蛋”(有点像图书应用程序中的苹果 Logo 。向下滚动,您会看到一个苹果 Logo 。)

我的问题是,我需要限制实际内容区域之外的暴露内容量。特别是当我用魔术鼠标滚动时,弹性会导致整个滚动内容消失!在您释放卷轴之前,它会移回原位。

现在,我想将弹性限制在特定的范围内。怎么办?

最佳答案

NSScrollView 管理一个 View ,该 View 的“ Canvas ”大于任何一次显示的内容。因此,如果您想要不同的行为:

  • 检查(void)setHorizontalScrollElasticity:但这并不完全符合你的要求。 (您希望允许固定弹性量)
  • 子类化 NSScrollView 以实现您想要的行为。
  • 从头开始创建您自己的类(好吧...任何继承自 NSResponder 的类,因为您想要处理事件)。

例如,我曾经编写过一个世界地图程序,但需要 map 在水平轴上永远循环。我只是使用子类 NSView 手动管理滚动。 (当前无权访问代码)

值得思考的事情:我理解你的原因,但只是想提一下。该行为应该是用户所期望的。如果它看起来像一个按钮,那么它的作用就应该像按钮一样。目前, ScrollView 具有弹性,因此当它们通过动量滚动时(用户不再触摸),一旦到达末尾,它就不会突然停止......这会让用户感到不舒服。

<小时/>

示例
如果子类化 NSScrollview,我会尝试覆盖 - (void)scrollWheel:(NSEvent *) 并检测 contentView 的边界并将其限制为某个值。大概是这样的:

- (void)scrollWheel:(NSEvent *)event
{
    [super scrollWheel:event];
    if (self.contentView.bounds.origin.y > SomeConstant)
         /* cap the value */
}

关于cocoa - 限制 Cocoa 中的滚动弹性(NSScrollView),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10321388/

相关文章:

jquery - 将鼠标滚轮绑定(bind)到 Jquery UI slider

javascript - 在 webview 中调用 createWebViewWithRequest 时自动调整窗口大小

javascript - 使用 Javascript 一次下载多个图像

cocoa - 使用 AFNetworking 通过 POST 上传文件

c# - 防止窗口焦点更改

java - MouseDragged 和 MouseMoved 在 Java Applet 中不起作用

jQuery 用户界面 : Draggable Scroll Issue

java - 使用鼠标滚动浏览 JTabbedPane 中的选项卡

objective-c - 如何计算 Objective-C 字符串(NSString)中的行数?

Objective-C 和 NSURL : where am I supposed to declare receivedData?