有谁知道一种方法来检测用户输入何时NSScrollView
滚动,并且只有用户输入)?
我想这样做的原因是因为我有一个NSScrollView
不断contentView
增加它的宽度的 a 。如果用户滚动到 contentView 的右手端,我希望NSScrollView
“锁定”到 contentView 的右手端(即跟踪它),并且我希望在用户(并且只有滚动)时释放“锁定” ) 从右手端滚动。
我最接近这个工作的方法是观察NSViewBoundsDidChangeNotification
并更改“锁定”变量,如下所示:
- (void)drawRect:(NSRect)dirtyRect
{
(...)
if (lockToEnd) {
NSLog(@"xAxisView at end");
NSPoint newScrollOrigin;
newScrollOrigin.y = 0;
newScrollOrigin.x = [self frame].size.width - [[self enclosingScrollView] bounds].size.width;
[self scrollPoint:newScrollOrigin];
}
}
-(void)SWXAxisViewDidScroll:(NSNotification *)note{
NSLog(@"XAxisDidScroll: %@",note);
if ([[[self enclosingScrollView] horizontalScroller] floatValue] > 0.97){
lockToEnd = YES;
} else {
lockToEnd = NO;
}
}
但是,这是不合适的,因为NSViewBoundsDidChangeNotification
每当边界发生变化时都会发送 an ,因此当contentView
增加的边界时,会NSScroller
减少它floatValue
并调用我的观察方法。即使我将NSScroller
'设置为 1.0,当第一个的超过 的时floatValue
,它也会重置为 0.0 。因此,我不知道是因为用户滚动还是因为变宽而发送的。bounds.size.width
contentView
bounds.size.width
NSScrollView
NSViewBoundsDidChangeNotification
contentView
我考虑过子类NSScroller
化并使用mouseDown:
andmouseDragged:
方法来跟踪用户输入并更新我的锁定变量。但是,我担心的是,如果用户滑动触控板进行滚动,这些方法将不会被调用。我认为可能没有根据的另一个较小的担忧是它可能会破坏NSScrollView
<->NSScroller
关系,我将不得不重新实现许多滚动功能。
我错过了一种更简单的方法吗?似乎我应该能够做到这一点,因为文件一直都在这样做?我对子类化的担忧是否NSScroller
有效?