我有一个 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/