Спеціальні шрифти в iOS 7


102

Я розробляю гру, і мені хотілося б використовувати спеціальний шрифт у своєму додатку. Я використовую SpriteKit для цього, якщо це важливо. Я намагався використовувати цей https://github.com/deni2s/IBCustomFonts, але не можу змусити його працювати з цим шрифтом http://www.fontspace.com/freaky-fonts/emulogic

Я спробував різні речі, і зареєстрував шрифт у info.plist програми ... Хтось знає, що відбувається?


Ви впевнені, що використовуєте правильну назву шрифту, використовуючи його у своєму коді?
Нік

1
цей блог може бути корисним для вас codewithchris.com/…
Сюй Інь,

Відповіді:


277

Перш за все, я припускаю, що SpriteKit не має ніяких значень.

  1. Вам потрібен ваш шрифт у форматі .otf або .ttf, скопійований у проект. Наприклад у підтримці файлів.
  2. Потрібно відредагувати .plist файл. Додайте ключ "Шрифти, надані програмою" у свій список і в пункт 0 скопіюйте точне ім'я файлу шрифту, який ви скопіювали у розширення "Підтримуючі файли". Наприклад: "JosefinSansStd-Light_0.otf"
  3. Переконайтеся, що шрифт, який ви імпортували у ваш додаток, упаковується у сам додаток. Зробіть це, вибравши ціль , а потім фази збірки , а потім скопіюйте ресурси ресурсу . Якщо ви не бачите там свій шрифт, перетягніть його з підтримуваних файлів .

Нарешті, ви хочете перерахувати всі ваші шрифти, коли програма починає просто бачити корисну назву для вашого шрифту. Ви зробите це за допомогою цього маленького фрагмента коду:

NSArray *fontFamilies = [UIFont familyNames];
for (int i = 0; i < [fontFamilies count]; i++)
{
    NSString *fontFamily = [fontFamilies objectAtIndex:i];
    NSArray *fontNames = [UIFont fontNamesForFamilyName:[fontFamilies objectAtIndex:i]];
    NSLog (@"%@: %@", fontFamily, fontNames);
}

Шукаю свій шрифт у друкованих результатах, наприклад, я б шукав "Josefin" і бачив би, що фактична назва шрифту - "JosefinSansStd-Light". Після цього вам потрібно використовувати лише цей шрифт:

UIFont *customFont = [UIFont fontWithName:@"JosefinSansStd-Light" size:20];

В iOS8 ви додаєте свої шрифти безпосередньо до проекту, і вони помітні в конструкторі інтерфейсів. Змініть свій код для врахування цього, але програмно налаштованого шрифту для iOS7 та виберіть його в конструкторі інтерфейсів xCode6. PS. Інструмент інтерфейсу в xCode6 дає вам правильну назву шрифту, яку ви можете скопіювати і вставити в код нижче.

#define SYSTEM_VERSION_LESS_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)

 if(SYSTEM_VERSION_LESS_THAN(@"8.0"))
    {
        UIFont *customFont = [UIFont fontWithName:@"OpenSans-Light" size:32];
        self.registerLabel.font = customFont;  
    }

Сподіваюсь, це допомагає, ура.


Дякую! Зрозумів! Проблема полягала в тому, що я не додав його до підтримуваних файлів, тому він не завантажувався: P
Жозе Марія

1
Мені довелося скористатися ключем плістівUIAppFonts
Майком Флінном

1
Я відтворив свою програму, весь проект з iOS7 / Xcode 5.1.1 в проект iOS8 / Xcode 6.0. Користувацький шрифт не відображався, поки я не зробив 2 кроку. Gr8 пояснення!
MB_iOSDeveloper

1
Цей же код для отримання імен шрифту в Swift: let fontFamilies = UIFont.familyNames() for familyName in fontFamilies { let fontNames = UIFont.fontNamesForFamilyName(familyName as String) println("\(familyName): \(fontNames)") }
Олександр Бекерт

1
Деякі швидкі коди для друку всіх назв шрифту:for name in UIFont.familyNames() { debugPrint(UIFont.fontNamesForFamilyName(name)) }
gimenete

24

Немає проблем використовувати спеціальні шрифти, я це зробив. Виконайте такі дії:

  1. Зареєструйте шрифт у своєму info.plist, додавши запис "Шрифти, надані програмою". Введіть назву файла шрифту, а не ім'я шрифту. Як font.ttf (я думаю, ви це вже робили)
  2. Перейдіть до свого проекту на навігаторі проектів, натисніть на назву проекту та перейдіть до «фаз збірки», потім подивіться вниз «Копіювати ресурси ресурсу», перейдіть донизу, є багато файлів та шукайте знак «+». Відкриється спливаюче вікно з файлами вашого проекту. Шукайте файл шрифту та додайте його в комплект.
  3. Нарешті перевірте назву шрифту. Коли ви використовуєте його у своєму коді, ви повинні використовувати ім'я шрифту, а не ім'я файлу. Щоб знати назву шрифту, двічі клацніть файл шрифту у Finder, і відкриється вікно із зазначенням шрифту. Перевірте цю назву вікна, це ім'я шрифту, який ви повинні використовувати.

І порада, додайте це ім'я як макрос у свій файл ..Prefix.pch. Це буде простіше використовувати його у вашому проекті, якщо вам доведеться використовувати шрифт кілька разів.

Проблема, яку я вважаю у вас, полягає в тому, що ви правильно зареєстрували шрифт, але він не був скопійований у пакет програм. Тож коли програма виконала, вона не змогла знайти шрифт. Ось чому крок 2 важливий. Я витратив багато часу, намагаючись зрозуміти це вперше :)


2
Ключовим для мене була назва шрифту. Дякую!
Оскар

20

Домогтися цього швидко

Якщо ви хочете перерахувати всі свої шрифти, коли програма починає просто бачити корисну назву для вашого шрифту. Ви можете зробити це за допомогою цього маленького фрагмента коду:

    UIFont.familyNames.forEach {
        print("fontFamily: \($0), fonts: \(UIFont.fontNames(forFamilyName: $0))")
    }

або зUIFont.familyNames.forEach { print("fontFamily: \($0), fonts: \(UIFont.fontNames(forFamilyName: $0))") }
Даніель

5

Мені ніколи не вдалося отримати ці відповіді на роботі, спробувавши кілька разів. Єдиний спосіб, коли я коли-небудь отримав у ньому спеціальний шрифт, щоб слідувати інструкції у прийнятій відповіді, а потім створити приховану мітку на дошці розповідей, яка використовує шрифт. Я можу використовувати шрифт програмно. Дивно і хакі я знаю, але це працювало на мене.


1
ви абсолютно праві. Я переглянув усе в багатьох навчальних посібниках, включаючи пліст, галочку для націлювання на проект, етапи складання та нарешті знайшов правильне прізвище шрифту, але воно все одно не спрацювало. Потім я додав прихований ярлик, як ви кажете, і нарешті він з’явився. Я використовую Xcode 7.2, і він повинен бути помилкою.
DrZ214

3

Якщо ви перебуваєте в Xcode 6, це так просто, як це стає. Просто додайте fontпапку у свій проект, додайте свій шрифт у папку, і ви готові йти.

введіть тут опис зображення


7
Переконайтесь, що ви також додали його до наміченої цілі. Підлий хобіт Xcode.
Метт Паркінс

3

Якщо жоден із перерахованих вище методів не працював для вас, і вам трапляється використовувати власний шрифт "програмно" лише (тобто ви не використовували його в жодному xib), тоді вам потрібно буде використовувати його принаймні один раз десь в одному xib, в будь-якому місці .

(PS Стюарт Кларк - вже відповів на це, так що не пишіть мені будь ласка. Однак я вирішив перефразувати і опублікувати його як окрему відповідь, тому що я пропустив його відповідь, мені було не зрозуміло, коли я прочитав її. Я знайшов я вирішив це рішення випадково, коли я тестував користувальницький шрифт у xib, і я побачив, що він працює в іншому місці програмно, але коли я видалив шрифт з xib, він перестав працювати програмно.)


2

Оновлено для Swift 3.

let fontFamilies:[String] = UIFont.familyNames

for fontFamily: String in fontFamilies {
    let fontNames: [String] = UIFont.fontNames(forFamilyName: fontFamily)
    print("\(fontFamily)  \(fontNames)");
}

0

Можливо, швидке виправлення - це зробило це для мене, коли шрифт вже працював, але новий напр. Label не показав потрібний шрифт:

чиста, глибока чиста та порожня отримана папка даних.


0
please try below code.
@end
@implementation UILabel (CustomFont)
-(void)setFontName:(NSString *)value{
CGFloat newsize = (self.font.pointSize * [UIScreen mainScreen].bounds.size.width)/320;
[self setFont:[UIFont fontWithName:self.font.fontName size:newsize]];
}
@end
@implementation UITextField (CustomFont)
-(void)setFontName:(NSString *)value{
CGFloat newsize = (self.font.pointSize * [UIScreen mainScreen].bounds.size.width)/320;
[self setFont:[UIFont fontWithName:self.font.fontName size:newsize]];
}
@end
@implementation UIButton (CustomFont)
-(void)setFontName:(NSString *)value{
CGFloat newsize = (self.titleLabel.font.pointSize * [UIScreen mainScreen].bounds.size.width)/320;
[self.titleLabel setFont:[UIFont fontWithName:self.titleLabel.font.fontName size:newsize]];
}
@end
@end

@interface UILabel (CustomFont)
-(void)setFontName:(NSString *)value;
@end
@interface UITextField (CustomFont)
-(void)setFontName:(NSString *)value;
@end
@interface UIButton (CustomFont)
-(void)setFontName:(NSString *)value;
@end
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.