NSTextView中的离散(逐行)滚动

时间:2014-06-09 22:59:53

标签: objective-c cocoa nstextview nsscrollview nsscroller

如何在NSTextView对象中实现逐行滚动?无论用户如何尝试滚动,它都必须工作:如果他们拖动滚动旋钮或在触控板上使用双指滚动手势。此外,滚动旋钮应始终以不连续的步骤移动。 (这正是Apples终端模拟器的工作方式。)

我首先要做的是继承NSTextView并覆盖adjustScroll :(它继承自NSView),其描述为here,即:

- (NSRect)adjustScroll:(NSRect)newVisible {
    NSRect modifiedVisible = newVisible;
    NSFont *font = [self font];
    CGFloat lineHeight = [[self layoutManager] defaultLineHeightForFont:font];
    modifiedVisible.origin.x = (int)(modifiedVisible.origin.x/lineHeight) * lineHeight;
    modifiedVisible.origin.y = (int)(modifiedVisible.origin.y/lineHeight) * lineHeight;
    return modifiedVisible;
}

但是,当我使用滚动旋钮时,这只会逐行滚动。偶然我发现子类化NSScrollView也会在使用触控板滚动时给我逐行滚动,即使我似乎没有做任何事情(所以为什么这个工作是个谜),唯一被覆盖的方法是这些:

- (instancetype)initWithFrame:(NSRect)frame {
    self = [super initWithFrame:frame];
    return self;
}
- (void)drawRect:(NSRect)dirtyRect {
    [super drawRect:dirtyRect];
}

然而,滚动旋钮仍然连续移动。我是否必须继承NSScroller并覆盖setDoubleValue(我尝试过这样做,但它并没有很好地工作,所以解决方案感觉很困难,尽管可能)或者我可以在我的子类中覆盖reflectScrolledClipView:NSScrollView(没有&# 39;完全没有工作),还是有更好的解决方案?

0 个答案:

没有答案