Как определить, когда пользователь и только пользователь прокручивает NSScrollView
Кто-нибудь знает способ обнаружить, когда NSScrollView
прокручивается пользовательским вводом, и только пользовательским вводом)?
Я хочу сделать это потому, что у меня есть NSScrollView
с contentView
это постоянно увеличивает его ширину. Я хочу NSScrollView
"заблокировать" на правом конце contentView (т.е. отследить его), если пользователь прокручивает к правому концу contentView, и я хочу, чтобы "блокировка" была снята, когда пользователь (и только прокрутки) прокручивает в сторону с правой стороны.
Самое близкое, что я должен был получить к этому, чтобы работать, наблюдая за 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
"s floatValue
до 1,0, это сбрасывается до 0,0, когда bounds.size.width
из contentView
первый превышает bounds.size.width
из NSScrollView
, Таким образом, я не могу сказать, если NSViewBoundsDidChangeNotification
был отправлен, потому что пользователь прокрутил или потому что contentView
стало шире.
Я рассмотрел подкласс NSScroller
и используя mouseDown:
а также mouseDragged:
методы для отслеживания ввода пользователя и обновления моей переменной блокировки. Однако меня беспокоит то, что эти методы не будут вызываться, если пользователь прокручивает свой трекпад для прокрутки. Другая меньшая проблема, которая, я думаю, является необоснованной, заключается в том, что NSScrollView
<->NSScroller
отношения, и я должен был бы повторно реализовать много функций прокрутки.
Я пропустил более простой способ сделать это? Кажется, я должен быть в состоянии сделать это, потому что документы делают это все время? Мои опасения по поводу подклассов NSScroller
действует?