Как стать автором
Обновить

Веселые шрифты в своем приложении

Время на прочтение2 мин
Количество просмотров5.1K
Игровые приложения для детей и взрослых скучны без веселых букв и цифр.
Строгий iPhone кодекс не давал разработчику до версии iOS 3.2 стандартных способов использовать свои шрифты в приложениях.
Все спасались нарисованными в редакторе картинками цифр и букв или чужими библиотеками.

image

Как теперь обстоит дело с custom fonts для разработчиков iPhone поделок?
Осторожно! Под хабракатом 1 картинка, 1 анекдот сомнение и 2 фрагмента кода.



image

Как получить такую картинку программно



1) Скачать на свой минимак понравившийся шрифт из любого ресурса бесплатных ttf фонтов, коих легион.

2) Запустить xCode, открыть проект, в папку Resource правой кнопкой мыши добавить (как существующие) скачанные фонты, например ch1.ttf. Операция ничем не отличается от добавления в проект png картинок или wav файлов.

3) Найти в проекте файл *-info.plist, добавить в него строку Fonts provided by application (выбирается из списка), в правой колонке напротив этой строки в поле Item вписываем названия файлов — фонтов, столько сколько захотим — например item0 | ch1.ttf и item1 | ch2.ttf.

В принципе все. Помните, что имя фонта находится внутри ttf файла и не совпадает с именем файла — для просмотра имени щелкните по файлу дважды мышкой. Например внутри моего файла ch1.ttf находится шрифт с именем Cheri Linea.
Вставляем в код программмно надпись типа UILabel или кнопку UIButton, устанавливаем фонт следующей функцией
[mylabel setFont: [UIFont fontWithName:@"Cheri Linea" size:20]];
Урра!
Получаем красивую надпись, миллион скачек и покупаем папе Карло тысячу новых курток.

Минусы данного подхода



Минус 1. Не работает на iPhone c iOs<3.2

Лечится использованием GraphicsServices фреймверка следующим способом
BOOL GSFontAddFromFile(const char * path);
NSUInteger loadFonts()
{
NSUInteger newFontCount = 0;
for (NSString *fontFile in [[NSBundle mainBundle] pathsForResourcesOfType:@"ttf" inDirectory:nil])
newFontCount += GSFontAddFromFile([fontFile UTF8String]);
return newFontCount;
}


Минус 2. Шрифты не работают с Интерфейс Билдером

Лечится порождением нового класса
// LabelMyFont.h
#import <uikit /UIKit.h>
@interface LabelMyFont : UILabel {
}
@end

// LabelMyFont.m
#import "LabelMyFont.h"
@implementation LabelMyFont

- (id)initWithCoder:(NSCoder *)decoder {
if (self = [super initWithCoder: decoder]) {
[self setFont: [UIFont fontWithName: @"Cheri Linea" size: self.font.pointSize]];
}
return self;
}
@end


Минус 3. Невозможно запрячь в одну упряжку Английские, Китайские и Русские фонты

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

Лечится деньгами? Шрифты можно купить или заказать? Ответа не знаю.

Буду счастлив услышать полезные советы и замечания от разработчиков.

Жму кнопку ОПУБЛИКОВАТЬ с опаской — за подобный предыдущий пост меня забанили на год.
Теги:
Хабы:
Всего голосов 53: ↑42 и ↓11+31
Комментарии25

Публикации

Истории

Работа

iOS разработчик
16 вакансий
Swift разработчик
17 вакансий

Ближайшие события

15 – 16 ноября
IT-конференция Merge Skolkovo
Москва
22 – 24 ноября
Хакатон «AgroCode Hack Genetics'24»
Онлайн
28 ноября
Конференция «TechRec: ITHR CAMPUS»
МоскваОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань