Проблема загрузки шрифтов iOS - PullRequest
0 голосов
/ 26 июля 2011

Хелле каждый!

Я добавил шрифт din.otf в свой проект iOS. Тогда в моем листе есть:

enter image description here

Теперь, когда я хочу использовать это, я просто должен написать эту строку:

lalel.font = [UIFont fontWithName:@"din" size:12.f];

Я прав? Это не работает вообще ... Спасибо!

1 Ответ

2 голосов
/ 16 сентября 2011

Попробуйте перечислить все шрифты, которые доступны на вашем устройстве после импорта, добавив этот фрагмент кода:

(взято из: http://ajnaware.wordpress.com/2008/10/24/list-of-fonts-available-on-the-iphone/)

Legacy Answer

// List all fonts on iPhone
  NSArray *familyNames = [[NSArray alloc] initWithArray:[UIFont familyNames]];
  NSArray *fontNames;
  NSInteger indFamily, indFont;
  for (indFamily=0; indFamily<[familyNames count]; ++indFamily)
  {
      NSLog(@"Family name: %@", [familyNames objectAtIndex:indFamily]);
      fontNames = [[NSArray alloc] initWithArray:
          [UIFont fontNamesForFamilyName:
          [familyNames objectAtIndex:indFamily]]];
      for (indFont=0; indFont<[fontNames count]; ++indFont)
      {
          NSLog(@"    Font name: %@", [fontNames objectAtIndex:indFont]);
      }
      [fontNames release];
  }
  [familyNames release];

И попробуйте найти имя вашего шрифта.

// End Legacy Answer

Я нашел способ загрузки шрифта во время выполнения, который не требует его добавленияв файле .plist.

+ (void)loadFontAtPath:(NSString*)path
{
    NSData *data = [[NSFileManager defaultManager] contentsAtPath:path];
    if(data == nil)
    {
#ifdef DEBUG
        NSLog(@"Failed to load font. Data at path is null path = %@", path);
#endif //ifdef Debug
        return;
    }
    CFErrorRef error;
    CGDataProviderRef provider = CGDataProviderCreateWithCFData((CFDataRef)data);
    CGFontRef font = CGFontCreateWithDataProvider(provider);
    if(!CTFontManagerRegisterGraphicsFont(font, &error)){
#ifdef DEBUG
        CFStringRef errorDescription = CFErrorCopyDescription(error);
        NSLog(@"Failed to load font: %@", errorDescription);
        CFRelease(errorDescription);
        return;
#endif //ifdef Debug
    }
    CFStringRef fontName = CGFontCopyFullName(font);
    NSLog(@"Loaded: %@", fontName);
    [[self sharedInstance] addFont:font withName:(NSString *)fontName];

    CFRelease(fontName);
    CFRelease(font);
    CFRelease(provider);
}

+ (void) unloadFont:(NSString*) fontName
{
    CFErrorRef error;
    CGFontRef fontref = [[self sharedInstance] getFontWithName:fontName];
    if(fontref)
    {
        CTFontManagerUnregisterGraphicsFont(fontref, &error);
        [[self sharedInstance] removeFontWithName:(NSString *)fontName];
    }
    else
    {
        NSLog(@"WARNING: Font cannot be unloaded: %@", fontName);
    }
}

И вы можете просто использовать имя, которое NSLog (@ "Loaded:% @", fontName); output.

...