Расплывчатое отображение шрифтов на компьютерах без сетчатки при использовании рисунка NSAttributedString - PullRequest
0 голосов
/ 05 апреля 2019

Я использую функцию 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-App comparison.

В коде приложения и на рисунке Sketch используется шрифт Apple «SF Pro Text» с весом шрифта «Semibold» и размером 22 единицы.

Любая помощь в выяснении того, что здесь происходит, будет принята с благодарностью.

1 Ответ

1 голос
/ 06 апреля 2019

Это может быть печально известная проблема «полупикселя».Попробуйте:

drawableString.draw(at: NSPoint(x: 0.5, y: 0.5))

Есть некоторая информация об этом здесь (найдите на странице «Точки и пиксели»).

...