自定义 NSButton 绘图搞乱了文本渲染
Custom NSButton drawing messes up text rendering
我将 NSButton / NSButtonCell 子类化,一切正常,但至少在 Retina 绘图中,只要我在 NSButton 或 NSButtonCell 中实现任何绘图函数,无论我是否进行一些自定义,文本渲染都会发生变化文本绘图或直接委托给超级实现。
如您所见,仅更改抗锯齿功能后文本变得更细了。
当我在 Xcode 的 Reveal-rip off 中检查它时,我发现当 none 的绘图方法被覆盖时,文本嵌入到 NSButtonTextField 中。一旦任何绘图方法被覆盖,NSButtonTextField 就会消失。
None 当我在按钮文本后面插入背景层并设置
时,会发生这种情况
button.isBorderd = false
但我不太喜欢那个解决方案。
有没有什么方法可以在不弄乱图层的情况下获得相同的 "fat" 文本渲染?也许是一个属性字符串属性,一个特殊的文本绘制命令,什么?
任何帮助将不胜感激/
我无法使用背景层重现您的解决方法,尽管我可能做错了。
我最终添加了一个 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 中呈现所有非文本,然后让文本字段呈现文本。也不理想,但这是我能够匹配字体渲染的唯一方法。
我有同样的问题,不仅在文本上而且在整个window。我解决了它在应用 Info.plist
中添加新行
支持高分辨率的布尔值是
之前:
之后:
我将 NSButton / NSButtonCell 子类化,一切正常,但至少在 Retina 绘图中,只要我在 NSButton 或 NSButtonCell 中实现任何绘图函数,无论我是否进行一些自定义,文本渲染都会发生变化文本绘图或直接委托给超级实现。
如您所见,仅更改抗锯齿功能后文本变得更细了。
当我在 Xcode 的 Reveal-rip off 中检查它时,我发现当 none 的绘图方法被覆盖时,文本嵌入到 NSButtonTextField 中。一旦任何绘图方法被覆盖,NSButtonTextField 就会消失。
None 当我在按钮文本后面插入背景层并设置
时,会发生这种情况button.isBorderd = false
但我不太喜欢那个解决方案。
有没有什么方法可以在不弄乱图层的情况下获得相同的 "fat" 文本渲染?也许是一个属性字符串属性,一个特殊的文本绘制命令,什么?
任何帮助将不胜感激/
我无法使用背景层重现您的解决方法,尽管我可能做错了。
我最终添加了一个 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 中呈现所有非文本,然后让文本字段呈现文本。也不理想,但这是我能够匹配字体渲染的唯一方法。
我有同样的问题,不仅在文本上而且在整个window。我解决了它在应用 Info.plist
中添加新行支持高分辨率的布尔值是
之前:
之后: