Я использую 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 не совпадает.
Какие-нибудь объяснения?
Возможно ли, что iOS применяет кернинг к SKLabelNode, хотя я использую моноширинный шрифт?