NSRulerView,将垂直测量扩展到底部

NSRulerView, Extending Vertical Measures to the Bottom

我破解了 Apple 的名为 Rulers 的示例项目来创建一个简单的 NSView 子类以显示垂直和水平标尺。看起来像下面这样。

- (void)awakeFromNib {
    NSScrollView *scrollView = [self enclosingScrollView];
    if (!scrollView) return;
    [scrollView setHasHorizontalRuler:YES];
    [scrollView setHasVerticalRuler:YES];
    [self setRulerOffsets];
    [self updateRulers];
    [scrollView setRulersVisible:YES];
    return;
}

+ (void)initialize {
    NSArray *upArray;
    NSArray *downArray;
    upArray = [NSArray arrayWithObjects:[NSNumber numberWithDouble:2.0], nil];
    downArray = [NSArray arrayWithObjects:[NSNumber numberWithDouble:0.5],[NSNumber numberWithDouble:0.2],nil];
    [NSRulerView registerUnitWithName:@"Grummets" abbreviation:NSLocalizedString(@"gt",@"Grummets abbreviation string") unitToPointsConversionFactor:100.0 stepUpCycle:upArray stepDownCycle:downArray];
    return;
}

- (void)setRulerOffsets {
    NSScrollView *scrollView = [self enclosingScrollView];
    NSRulerView *horizRuler;
    NSRulerView *vertRuler;
    NSView *docView;
    NSView *clientView;
    NSPoint zero;
    docView = [scrollView documentView];
    clientView = self;
    ...
}

下图是我有的

我的问题是是否可以反转垂直测量值。现在,0 位于底部。可不可以把起点设置在顶部,然后向下延伸到底部?

谢谢。

来自文档:

A vertical ruler takes into account whether the coordinate system of the NSScrollView’s document view—not the receiver’s client view—is flipped. A horizontal ruler is always flipped.

因此,您可以通过翻转文档视图的坐标系来解决此问题(您可以覆盖视图上的 isFlipped)。

祝你好运 — 这个 API 是 over 15 years old :)