Программирование для iPhone, iPad

Программирование для iPhone, iPad

Сегодня мы разберем небольшой урок программистов под iOS.

Задача у нас такая: Требуется использовать шрифты, предустановленные на устройстве с iOS, чтобы отобразить на экране какой-либо текст.

Решение: Воспользуйтесь классом UIFont.

Обсуждение: Шрифты имеют фундаментальное значение для отображения текста в графическом пользовательском интерфейсе. Во фреймворке UIKit программисту предоставляются высокоуровневые API, обеспечивающие перечисление, загрузку и использование шрифтов. В Cocoa Touch шрифты заключены в классе UIFont.


В каждом устройстве с iOS есть встроенные системные шрифты. Шрифты распределены по семействам (Family), а в каждом семействе есть гарнитуры (Faces). Например, Helvetica — это семейство шрифтов, a Helvetica Bold — одна из гарнитур этого семейства. Чтобы шрифт можно было загрузить, необходимо знать гарнитуру шрифта (фактически — его название), а чтобы узнать гарнитуру, нужно знать семейство. Итак, давайте для начала перечислим все семейства шрифтов, которые уже установлены на устройстве, воспользовавшись методом familyNames класса UIFont:

- (void) enumerateFonts{
for (NSString *familyName in [UIFont familyNames]){
NSLog(@"Font Family = %$", familyName);
}
}
Запустив эту программу в эмуляторе, я получил примерно такие результаты:
Font Family = Heiti ТС
Font Family = Sinhala Sangam MN
Font Family = Kannada Sangam MN
Font Family = Georgia
Font Family = Heiti J Font Family = Times New Roman
Font Family = Snell Roundhand
Font Family = Geeza Pro
Font Family = Helvetica Neue

Выстроив такой список семейств шрифтов, мы можем перечислить гарнитуры в каждом семействе. Мы будем пользоваться методом fontNamesForFamilyName: класса UIFont, а в ответ получим массив названий гарнитур из того семейства шрифтов, которое мы указали как параметр:

- (void) enumerateFonts{
for (NSString *familyName in [UIFont familyNames]){
NSLog(@"Font Family = %&". familyName):
for (NSString *fontName in
[UIFont fontNamesForFamilyName:familyName]){
NSLog(@"\U@", fontName):
}
}
}

Запустив этот код в эмуляторе iOS, имеем:

...
Font Family = Geeza Pro
GeezaPro
GeezaPro-Bold
Font Family = Helvetica Neue
HelveticaNeue-Italic
HelveticaNeue-Bold
He1 vet i caNeue-BoldIta1i с
HelveticaNeue

Итак, мы видим, что Helvetica Neue — это семейство шрифтов, a HelveticaNeue- Bold — одна из гарнитур этого семейства. Теперь, зная имя шрифта, мы можем загружать шрифты в объекты типа UI Font с помощью метода класса fontWi thName: size:, относящегося к классу UIFont:

UIFont *helveticaBold = [UIFont fontWithName:@MHelveticaNeue-Bold"
size:12.Of];

Если в результате работы метода класса fontWithName:size:, относящегося к классу UIFont, имеем nil, это означает, что найти шрифт с указанным именем не удалось. Убедитесь, что шрифт с заданным вами именем действительно присутствует в системе. Для этого сначала перечислите все семейства шрифтов, а потом все названия гарнитур из каждого семейства. Про другие гарнитуры и шрифты вы можете почитать более подробно в блоге вебмастера.

Кроме того, можно воспользоваться методом экземпляра systemFontOfSize:, относящимся к классу UIFont (или его «жирным» аналогом, bol dSystemFontOfSi ze:), для загрузки локальных системных шрифтов — где бы они ни находились — прямо на устройстве, где работает ваш код. Стандартный системный шрифт в iOS — Helvetica.