【发布时间】:2014-11-18 15:18:17
【问题描述】:
从 OSX 10.7 开始,Apple 建议使用 drawFocusRingMask 和 focusRingMaskBounds 方法作为围绕基于 NSView 的对象绘制焦点环的方式,而不是之前在 10.6 中的方式(在 drawRect: 中使用 NSSetFocusRingStyle()) . (见release notes)。
在 OSX 10.10 上测试:
我有一个 NSTextView 后代,它按照建议实现了基本的焦点环绘制:
- (void)drawFocusRingMask {
NSRectFill([self bounds]);
}
- (NSRect)focusRingMaskBounds {
return [self bounds];
}
这个 NSTextView 以编程方式直接添加到内容视图中(没有任何滚动视图)。
这在大多数情况下效果很好,但是,当使用scaleUnitSquareToSize: 缩放 NSTextView 时,绘制的焦点环完全不正确。
呼唤:
[textView scaleUnitSquareToSize:NSMakeSize(1.5, 1.5)];
看起来像这样:
进一步向上或向下缩放会导致对焦环矩形更加偏斜。将 NSTextView 的比例重置回 {1.0, 1.0} 会导致焦点环再次正确绘制。
我认为这是对焦环代码中的某种错误。在调用drawFocusRingMask/focusRingMaskBounds(内部类_NSAutomaticFocusRing负责此)之前,它似乎对用于绘制焦点环的图形上下文进行了转换。
知道如何解决这个问题吗?我是否应该找到一种方法将上下文转换为正确的坐标(到目前为止没有成功)?或者有没有其他方法可以强制对焦环正常工作?
【问题讨论】:
-
是否与从坐标系原点进行缩放有关?
-
视图的缩放不会直接影响对焦环,因为它是由 _NSAutomaticFocusRing 在不同的图形上下文中单独绘制的。 _NSAutomaticFocusRing 确实会查询视图并根据视图的坐标执行转换,我认为问题就在那里。
标签: objective-c macos cocoa user-interface nstextview