4

我正在继承 NSButton / NSButtonCell 并且一切正常,但至少在 Retina 绘图中,只要我在 NSButton 或 NSButtonCell 中实现任何绘图功能,无论我是进行一些自定义文本绘图还是直接委托,文本渲染都会发生变化到超级实现。

按钮绘图

正如您所看到的,仅更改了抗锯齿,文本就变得更薄了。

当我在 Xcode 的 Reveal-rip off 中检查这一点时,我发现当没有覆盖任何绘图方法时,文本嵌入在 NSButtonTextField 中。一旦任何绘图方法被覆盖,NSButtonTextField 就会消失。

当我在按钮文本后面插入背景层并设置时,这些都不会发生

button.isBorderd = false

但我不太喜欢这种解决方案。

有没有办法在不弄乱图层的情况下获得相同的“胖”文本渲染?也许是一个属性字符串属性,一个特殊的文本绘制命令,什么?

任何帮助,将不胜感激/

4

2 回答 2

0

我无法使用背景图层重现您的解决方法,尽管我可能做错了。

我最终添加了一个 NSTextField 作为按钮的子视图,具有以下属性:

_titleTextField = [[NSTextField alloc] initWithFrame:NSZeroRect];
[_titleTextField setBordered:NO];
[_titleTextField setDrawsBackground:NO];
[_titleTextField setFont:[NSFont systemFontOfSize:13]];
[_titleTextField setTextColor:[FantasticalColors color:@"dimLabelTextColor"]];
[_titleTextField setStringValue:[self title]];
[_titleTextField setEditable:NO];
[_titleTextField setFocusRingType:NSFocusRingTypeNone];
[self addSubview:_titleTextField];

然后我能够在单元格的 drawRect 中呈现所有非文本,然后让文本字段呈现文本。也不理想,但这是我能够匹配字体渲染的唯一方法。

于 2017-04-02T02:06:10.337 回答
0

我有同样的问题,不仅在文本中,而且在整个窗口中。我解决了它在应用程序 Info.plist 中添加了一个新行

具有高分辨率的布尔值 YES

显示此 Apple 教程

前:
图像之前

后: 后像

于 2018-01-10T22:27:12.297 回答