Разработка iPhone/iPod touch приложений:Делаем шрифт Bold‘ом
Недавно встала задача следующего плана – программно выставить у 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Самое худшее, что можно было прідумать прі оформленіі софта, – іспользовать нестандартный шріфт.
Полезные ссылки по разработке для iOS | Записки программиста о мобильных телефонах и смартфонах
в 10:34, 06.04.2011[...] Разработка iPhone/iPod touch приложений:Делаем шрифт Bold‘ом Краткий обзор метов по работе со шрифтам. Статья особенно ценна списком имен шрифтов, установленных на iPhone. [...]