Я использую функцию NSAttributedString
draw(at:)
внутри NSView
, чтобы отображать некоторый текст в пользовательском шрифте внутри моего окна.
Однако шрифт выглядит странно размытым и «слишком тяжелым» при работе на MacBook без сетчатки (как на внутреннем дисплее, так и на внешнем ЖК-дисплее).
Поскольку я могу идеально воспроизвести желаемый результат в Sketch на той же машине, я предполагаю, что это проблема с моим кодом.
Вот мой код:
import Cocoa
class StepNameLabel: NSView {
// Im aware that this is not the intended way of loading Apple's system fonts
// However, this was the best way I could find to make sure that both Sketch
// and the app were using the exact same fonts.
var font = NSFont(name: "SF Pro Text Semibold", size: 22)
override func draw(_ dirtyRect: NSRect) {
super.draw(dirtyRect)
let text = "Choose your Images"
let attributes: [NSAttributedString.Key: Any] = [
.font: font,
.foregroundColor: NSColor.white
]
print(font?.fontName)
let drawableString = NSAttributedString(string: text, attributes: attributes)
frame.size = drawableString.size()
drawableString.draw(at: NSPoint(x: 0, y: 0))
}
}
А вот скриншот, показывающий разницу между Sketch-файлом и приложением, работающим на одном дисплее (слева: Графика в приложении Sketch, справа: вывод приведенного выше кода):
Код приложения и графика Sketch используют шрифт Apple «SF Pro Text» с толщиной шрифта «Semibold» и размером 22 единицы.
Любая помощь в выяснении того, что здесь происходит не так, будет принята с благодарностью.
Это может быть печально известная проблема «полпикселя». Пытаться:
drawableString.draw(at: NSPoint(x: 0.5, y: 0.5))
Есть некоторая информация об этом здесь (выполните поиск на странице «Точки и пиксели»).