Пользовательские шрифты в iOS 7

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

Я пробовал разные вещи, и я зарегистрировал шрифт в info.plist приложения... Кто-нибудь знает, что происходит?

Ответ 1

Прежде всего, я предполагаю, что SpriteKit не имеет никакого значения.

  • Вам нужен ваш шрифт в .otf или .ttf, скопированный в ваш проект. Например, в разделе "Поддержка файлов".
  • Вам нужно отредактировать файл .plist. Добавьте "Шрифты, предоставленные приложением" , в ваш plist и в Item 0 скопируйте точное имя файла шрифта, который вы скопировали, в ваши поддерживающие файлы WITH extension. Например: "JosefinSansStd-Light_0.otf"
  • Убедитесь, что шрифт, который вы импортировали в приложение, упакован в самое приложение. Сделайте это, выбрав Целевая, затем Сборка фаз, затем Ресурсы копирования ресурсов. Если вы не видите шрифт там, перетащите его из Поддерживающие файлы.

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

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;  
    }

Надеюсь, это поможет, приветствует.

Ответ 2

Нет проблем с использованием пользовательских шрифтов, я сделал это. Выполните следующие действия:

  • Зарегистрируйте шрифт в вашем info.plist, добавив запись "Шрифты, предоставленные приложением". Поместите имя файла шрифта, а не имя шрифта. Как font.ttf(я думаю, вы уже это сделали)
  • Перейдите в свой проект в навигаторе проекта, нажмите на название проекта и перейдите к "фазам сборки", затем посмотрите в "Копировать ресурсы Bundle", идите в нижнюю часть, есть много файлов и найдите "+" знак. Всплывающее окно откроется с вашими файлами проекта. Найдите файл шрифта и добавьте его в комплект.
  • Наконец, проверьте имя шрифта. Когда вы используете его в своем коде, вы должны использовать имя шрифта, а не имя файла. Чтобы узнать имя шрифта, дважды щелкните файл шрифта в Finder, и откроется окно с изображением шрифта. Проверьте заголовок окна, что имя шрифта, который вы должны использовать.

И совет, добавьте это имя как макрос в ваш файл..Prefix.pch. Будет проще использовать его в вашем проекте, если вам придется использовать шрифт несколько раз.

Проблема, которая, как я думаю, у вас была, это то, что вы правильно зарегистрировали шрифт, но он не был скопирован в пакет приложений. Поэтому, когда приложение выполнено, он не смог найти шрифт. Вот почему шаг 2 важен. Я потратил много времени, пытаясь понять это в первый раз:)

Ответ 3

Чтобы добиться этого быстрым

Если вы хотите перечислить все свои шрифты, когда приложение запустится, чтобы увидеть полезное имя для вашего шрифта. Вы можете сделать это с помощью этого небольшого фрагмента кода:

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

Ответ 4

Я никогда не мог получить эти ответы на работу, попробовав несколько раз. Единственный способ, которым я когда-либо получал собственный шрифт, чтобы следовать инструкциям в принятом ответе, тогда создайте скрытую метку в панели рассказов, в которой используется шрифт. Я могу использовать шрифт программно. Странный и хриплый, я знаю, но это сработало для меня.

Ответ 5

Если вы в Xcode 6, это так же просто, как и получается. Просто добавьте в проект папку font, добавьте шрифты в папку, и вам будет хорошо.

enter image description here

Ответ 6

Если ни один из вышеперечисленных методов не работал для вас, и вы используете только свой программный шрифт "программно" (т.е. вы не использовали его ни в каком xib), тогда вам нужно будет использовать его хотя бы один раз где-то в одном xib, где угодно.

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

Ответ 7

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

let fontFamilies:[String] = UIFont.familyNames

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

Ответ 8

Возможно, быстрое исправление - это сделало это для меня, когда шрифт уже работал, но новый, например, Ярлык не отобразил желаемый шрифт:

чистая, глубокая и пустая производная папка данных.

Ответ 9

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