2012-04-25 75 views
1

我有一个可可应用程序,有十几个scrollViews。我喜欢这种弹性,特别是在某些情况下,我实际上会放置某种“复活节彩蛋”(有点像书本应用中的苹果徽标,向下滚动,会看到一个苹果徽标。)可可(NSScrollView)限制滚动弹性

我的问题是,我需要限制超出实际内容区域的暴露内容的数量。当我用魔术鼠标滚动时,尤其是弹性会导致整个滚动内容消失!直到您释放滚动条,它才会重新进入。

现在,我想将弹性限制到特定的边距。怎么样?

回答

3

NSScrollView管理一个视图,该视图的“画布”大于/可以在任何时候显示的视图。所以如果你想要一个不同的行为:

  • 检查(void)setHorizontalScrollElasticity:但这并不完全是你想要的。 (你想允许固定弹性量)
  • 子类NSScrollView实现你想要的行为。
  • 从头开始创建自己的类(以及...因为您想处理事件而继承自NSResponder的任何东西)。

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

某事思考:我理解你的理由,但只是想提及它。该行为应该是用户期望的。如果它看起来像一个按钮,它应该表现得像一个按钮。目前,滚动视图具有弹性,因此当他们通过动态滚动(用户不再触摸)时,滚动视图一旦到达终点就不会突然停止......这对用户来说会是一种震撼。



如果继承NSScrollview,我会尝试重写- (void)scrollWheel:(NSEvent *)和检测哪些内容查看的范围,并在一定值盖住它。一些事情围绕着:

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

我认为子类的方法是最合理的..因为第一个是你没有指出的问题,最后是太多的工作和重新发明轮子。我希望尽快尝试一下。我会欣赏一些代码,但是我会在测试完代码后添加我的代码。 – Mazyod 2012-04-26 01:57:49

+0

添加了一些示例代码。 – 2012-04-26 02:56:55

+0

HELL NO! xD我只是自己做的!看看: - (void)scrollWheel:(NSEvent *)theEvent NSRect rectOfInterest = [[self contentView] visibleRect]; NSLog(@“Visible Rect:%@”,NSStringFromRect(rectOfInterest));如果(rectOfInterest.origin.x> -100){super scrollWheel:theEvent];如果(rectOfInterest.origin.x> -100){ } } ... +1你打败了我;) – Mazyod 2012-04-26 03:00:22