Кто-нибудь знает способ определения, когда 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
действительны?