嵌套的NSScrollViews可以用不同的手势滚动?

时间:2017-04-13 04:55:20

标签: macos cocoa nsscrollview nsresponder trackpad

我有一个NSScrollView嵌套在另一个NSScrollView内的应用。我希望用户能够使用双指滑动滚动内部滚动视图,并使用三个手指滚动外部滚动视图。

我想我需要以某种方式配置每个scrollview以拒绝错误数量的手指触摸,但我不知道如何做到这一点。

1 个答案:

答案 0 :(得分:0)

我明白了!诀窍是子类化内部ScrollView并强制它拒绝具有一定数量触摸的手势,将它们转发到父卷轴视图:

- (void)scrollWheel:(NSEvent *)event {
    if (_forwardScrollToParent) {
        // [self.enclosingScrollView scrollWheel:event];
    } else {
        [super scrollWheel:event];
        [self recordInteractionWithThisTab];
    }
}

- (void)touchesBeganWithEvent:(NSEvent *)event {
    [super touchesBeganWithEvent:event];
    NSInteger nTouches = [event touchesMatchingPhase:NSTouchPhaseTouching inView:self].count;
    if (nTouches == 3) {
        _forwardScrollToParent = YES;
    } else {
        _forwardScrollToParent = NO;
    }
}