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

0 ответов

Другие вопросы по тегам