Почему моноширинные шрифты iOS не ведут себя подобным образом?

Я использую SpriteKit, и в моем приложении iOS есть таймер, который отображается через SKLabelNode и обновляется с помощью функции обновления. Я не хотел, чтобы цифры двигались влево и вправо по мере увеличения счетчика, поэтому я попытался использовать Courier New. Он работал намного лучше, чем Avenir, но все же есть небольшие колебания в ширине некоторых цифр. (Цифры 6 и 9 немного шире других цифр.) Я видел эти колебания в нескольких разных экспериментах, в которых я пытался:

  • обычные и жирные стили
  • большой (65) и маленький (9) размер шрифта
  • Курьерские шрифты New и Menlo
  • Симулятор Xcode и iPod Touch

Я отправил такие запросы, как «какой шрифт имеет цифры одинаковой ширины», но все ответы, которые я смог найти, просто гласили «использовать моноширинный шрифт». (См. https://graphicdesign.stackexchange.com/questions/13148/which-fonts-have-the-same-width-for-every-character или Моноширинный шрифт - не совсем моноширинный?)

Мой код очень простой. Я настраиваю ScoreNode один раз следующим образом:

    scoreNode = SKLabelNode(fontNamed: "Courier New")
    scoreNode.fontSize = 65
    scoreNode.fontColor = UIColor.blackColor()
    scoreNode.text = "0"
    scoreNode.position = CGPoint(x: patternPane.midX, y: patternPane.midY)
    patternPaneNode.addChild(scoreNode)

Затем я обновляю счет следующим образом:

    scoreNode.text = "\(viewControllerDelegate!.getScore())"

Вот изображение, накладывающееся на кадр, показывающий 28, с частью кадра, показывающим 29. Вы можете видеть, что края фильма выровнены, и вы можете видеть, что основание 2 не совпадает.

частичное 29, наложено на 28

Какие-нибудь объяснения?

Возможно ли, что iOS применяет кернинг к SKLabelNode, хотя я использую моноширинный шрифт?


person mike663    schedule 19.06.2015    source источник
comment
не могли бы вы еще добавить скриншот?   -  person Sulthan    schedule 19.06.2015
comment
Это один SKLabelNote (отображающий двузначное число) или два узла, отображающих по одной цифре каждый? В последнем случае, как определяется их положение по отношению друг к другу?   -  person Martin R    schedule 20.06.2015
comment
Это один узел с двумя цифрами.   -  person mike663    schedule 20.06.2015


Ответы (1)


Начиная с iOS 9, все шрифты по умолчанию используют пропорциональные числа.

Если вы используете UILabel, вы можете выбрать моноширинный цифр, но, насколько я могу судить, решения для SKLabelNode нет.

Дополнительная информация в этом видео WWDC2015 (минута 26): https://developer.apple.com/videos/play/wwdc2015/804/

person scribu    schedule 11.02.2017