有没有人知道一种方法来检测用户输入滚动NSScrollView
的时间,只有用户输入?)
我想要这样做的原因是因为我有一个NSScrollView
contentView
,它不断增加它的宽度。我想让NSScrollView
'锁定'到contentView的右端(即跟踪它),如果用户滚动到contentView的右端,我希望当用户释放'lock'时(只有卷轴)从右端滚动。
我最接近工作的方法是观察NSViewBoundsDidChangeNotification
并更改'lock'变量,如下所示:
- (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
,因此当contentView
的界限增加时,NSScroller
会减少它floatValue
我的观察方法被调用了。如果我将NSScroller
的{{1}}设置为1.0,则当floatValue
的{{1}}首先超过bounds.size.width
时,它会重置为0.0 {1}}。因此,我无法判断contentView
是否因为用户滚动或bounds.size.width
变宽而被发送。
我考虑过继承NSScrollView
并使用NSViewBoundsDidChangeNotification
和contentView
方法来跟踪用户输入并更新我的锁变量。但是,我担心的是,如果用户滑动其触控板进行滚动,则不会调用这些方法。我认为另一个较小的问题可能是没有根据的,它可能会破坏NSScroller
< - > mouseDown:
关系,我将不得不重新实现许多滚动功能。
我错过了一种更简单的方法吗?看来我应该能够做到这一点,因为文件一直这样做?我对子类化mouseDragged:
的关注是否有效?