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

限制Cocoa中的滚动弹性(NSScrollView),cocoa,mouseevent,mousewheel,appkit,nsscrollview,Cocoa,Mouseevent,Mousewheel,Appkit,Nsscrollview,我有一个cocoa应用程序,它有十几个滚动视图。我喜欢它的弹性,特别是在一些情况下,我会放一些“复活节彩蛋”(有点像图书应用程序中的苹果标志。你向下滚动,你会看到一个苹果标志。) 我的问题是,我需要将公开内容的数量限制在实际内容区域之外。特别是当我用魔法鼠标滚动时,弹性使整个滚动内容消失!在释放滚动条之前,滚动条会向后移动 现在,我想把弹性限制在一个特定的范围内。如何管理?NSScrollView管理的视图的“画布”大于任何时候显示的内容。因此,如果您想要不同的行为: 检查一下,但这并不完全符

我有一个cocoa应用程序,它有十几个滚动视图。我喜欢它的弹性,特别是在一些情况下,我会放一些“复活节彩蛋”(有点像图书应用程序中的苹果标志。你向下滚动,你会看到一个苹果标志。)

我的问题是,我需要将公开内容的数量限制在实际内容区域之外。特别是当我用魔法鼠标滚动时,弹性使整个滚动内容消失!在释放滚动条之前,滚动条会向后移动


现在,我想把弹性限制在一个特定的范围内。如何管理?

NSScrollView管理的视图的“画布”大于任何时候显示的内容。因此,如果您想要不同的行为:

  • 检查一下,但这并不完全符合你的要求。(您希望允许一定量的弹性)
  • 子类NSScrollView来实现所需的行为
  • 从头开始创建您自己的类(因为您希望处理事件,所以可以从NSResponder继承任何内容)
例如,我曾经编写过一个世界地图程序,但需要地图在水平轴上永远循环。我只是用一个子类NSView手动管理滚动。(当前没有访问代码的权限)

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


示例
如果将NSScrollview子类化,我将尝试重写
-(void)scrollWheel:(NSEvent*)
,并检测contentView的边界并将其限制在某个值。围绕以下几行:

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

我认为子类方法是最合理的。。正如你所指出的,第一个问题是不可能的,而第三个问题是对车轮进行过多的工作和改造。我很快就会试试的,希望如此。我会很感激一些代码,但我会在测试完后添加我的代码。该死的不!xD我只是自己做的!查看:-(void)滚轮:(NSEvent*)事件{NSRect rectOfInterest=[[self contentView]visibleRect];NSLog(@“Visible Rect:%@”,NSStringFromRect(rectOfInterest));if(rectOfInterest.origin.x>-100){[super scrollWheel:theEvent];}+1.你比我强;)