Разработка iPhone/iPod touch приложений:Делаем шрифт Bold‘ом

img_0001

Шрифты


Недавно встала задача следующего плана – программно выставить у UILabel толщину шрифта в bold. После недолгих поисков, выяснилось, что у UIFont вообще отсутствуют понятия вида bold, italic, и тем более bold-italic , максимум, что можно сделать, так это создать системный шрифт, при помощи одного из методов
[sourcecode language='objc']
// Some convenience methods to create system fonts
+ (UIFont *)systemFontOfSize:(CGFloat)fontSize;
+ (UIFont *)boldSystemFontOfSize:(CGFloat)fontSize;
+ (UIFont *)italicSystemFontOfSize:(CGFloat)fontSize;
[/sourcecode]

После увиденного, на горизонте памяти стали всплывать мысли о том, что на самом-то деле не все шрифты могут быть bold или italic. И сразу же появилась мысль – а какие все-таки шрифты могут быть? И какие вообще шрифты есть на устройствах типа iPod / iPhone?

Итак, для того, чтобы получить список всех семейств шрифтов на устройстве, достаточно всего одной строки

[sourcecode language='objc']
// Если порядок не важен, то достаточно одной строки
NSArray * fontFamilyNames = [UIFont familyNames];

...

//А если важен - то нужно немного больше (две)
NSSortDescriptor * sortDesc = [[[NSSortDescriptor alloc]
 initWithKey:@"description" ascending:YES] autorelease];
NSArray * fontFamilyNames = [[UIFont familyNames] sortedArrayUsingDescriptors:
[NSArray arrayWithObject:sortDesc]];
[/sourcecode]

С радостью пытаемся создать шрифт, при помощи одного из полученных имен семейств шрифтов:

[sourcecode language='objc']
cell.textLabel.font = [UIFont fontWithName:@"Arial" size:20];
[/sourcecode]

И, вуаля! Все работает. Вот только все еще не совсем понятно, как быть с bold или italic. В каждом семействе шрифтов, “живет” от одного и более шрифтов, так, если вызвать

[sourcecode language='objc']
[UIFont fontNamesForFamilyName:@"Arial"]
[/sourcecode]

то в результате получим, что в семействе шрифтов “Arial” есть аж четыре шрифта

  • ArialMT
  • Arial-ItalicMT
  • Arial-BoldMT
  • Arial-BoldItalicMT

Подставляем один из четырех вышеперечисленных, и получаем искомый результат.

Ниже показаны все шрифты, которые были у меня на устройстве:

[sourcecode language='objc']
American Typewriter
  AmericanTypewriter
  AmericanTypewriter-Bold
AppleGothic
  AppleGothic
Arial
  Arial-BoldItalicMT
  Arial-BoldMT
  Arial-ItalicMT
  ArialMT
Arial Hebrew
  ArialHebrew
  ArialHebrew-Bold
Arial Rounded MT Bold
  ArialRoundedMTBold
Arial Unicode MS
  ArialUnicodeMS
Courier
  Courier
  Courier-Bold
  Courier-BoldOblique
  Courier-Oblique
Courier New
  CourierNewPS-BoldItalicMT
  CourierNewPS-BoldMT
  CourierNewPS-ItalicMT
  CourierNewPSMT
DB LCD Temp
  DBLCDTempBlack
Geeza Pro
  GeezaPro
  GeezaPro-Bold
Georgia
  Georgia
  Georgia-Bold
  Georgia-BoldItalic
  Georgia-Italic
Heiti J
  STHeitiJ-Light
  STHeitiJ-Medium
Heiti K
  STHeitiK-Light
  STHeitiK-Medium
Heiti SC
  STHeitiSC-Light
  STHeitiSC-Medium
Heiti TC
  STHeitiTC-Light
  STHeitiTC-Medium
Helvetica
  Helvetica
  Helvetica-Bold
  Helvetica-BoldOblique
  Helvetica-Oblique
Helvetica Neue
  HelveticaNeue
  HelveticaNeue-Bold
Hiragino Kaku Gothic ProN
  HiraKakuProN-W3
  HiraKakuProN-W6
Marker Felt
  MarkerFelt-Thin
Thonburi
  Thonburi
  Thonburi-Bold
Times New Roman
  TimesNewRomanPS-BoldItalicMT
  TimesNewRomanPS-BoldMT
  TimesNewRomanPS-ItalicMT
  TimesNewRomanPSMT
Trebuchet MS
  Trebuchet-BoldItalic
  TrebuchetMS
  TrebuchetMS-Bold
  TrebuchetMS-Italic
Verdana
  Verdana
  Verdana-Bold
  Verdana-BoldItalic
  Verdana-Italic
Zapfino
  Zapfino
[/sourcecode]

Ухтышка!

На этом, в принципе, можно было бы и завершить мой пост, но ;). Пока я начисто переписывал код из документации из iPhone SDK, было найдено следующее:

  • Не обязательно указывать fontName конкретно, можно вполне указывать fontFamilyName. Так, у нас “прокатило” с fontName = @”Arial”". По сути, шрифта с таким именем нету. Есть только ArialMT. Но, видать, в случае, если указывать семейство шрифтов, используется первый из семейства.
  • Если необходимо использовать некоторую разновидность шрифта в семействе – будь то bold, italic, или obligue, то “фишка”c fontFamilyName (Arial-Bold) не проходит. Приходится все-таки писать полное название шрифта(Arial-BoldMT).

Напоследок – отдаю проект, которые просто выводит все шрифты на iPhonе. Надо сказать, разницы между шрифтами на симуляторе и на девайсе я не увидел, правда дополнительно шрифты не ставил, так что это нуждается в проверке. потому что в iPhone Simulator’e тот же набор шрифтов ;). Во всяком случае, iPhone Simulator возвращает не системные шрифты, так что можно быть спокойным – то что работает на симуляторе, будет работать и на девайсе.
Все. ;)

Комментарии

eisernWolf

в 23:30, 28.06.2009

Самое худшее, что можно было прідумать прі оформленіі софта, – іспользовать нестандартный шріфт.

[...] Разработка iPhone/iPod touch приложений:Делаем шрифт Bold‘ом Краткий обзор метов по работе со шрифтам. Статья особенно ценна списком имен шрифтов, установленных на iPhone. [...]

Оставить комментарий