iPhone SDK 3.2 и UIAppFonts - PullRequest
       29

iPhone SDK 3.2 и UIAppFonts

8 голосов
/ 10 мая 2010

Я добавил свой пользовательский шрифт в UIAppFonts, и он отлично загружается: (отображается в [UIFont familyNames]). Когда я вручную устанавливаю шрифт в viewDidLoad { [myLabel setFont: [UIFont fontWithName:@"CustomFont" size: 65.0]]; }, все работает, и шрифт отображается.

Однако делать то же самое в IB нельзя (вместо этого используется другой шрифт по умолчанию). Создание IBOutlets для каждой метки и исправление шрифтов вручную в viewDidLoad довольно болезненно.

У кого-нибудь еще были проблемы с поддержкой пользовательских шрифтов для работы с 3.2 SDK и IB?

Ответы [ 3 ]

2 голосов
/ 08 июня 2010

имел подобную проблему. И исправил ее таким образом ...

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

- (NSUInteger) loadFonts{
NSUInteger newFontCount = 0;
NSBundle *frameworkBundle = [NSBundle bundleWithIdentifier:@"com.apple.GraphicsServices"];
const char *frameworkPath = [[frameworkBundle executablePath] UTF8String];
if (frameworkPath) {
    void *graphicsServices = dlopen(frameworkPath, RTLD_NOLOAD | RTLD_LAZY);
    if (graphicsServices) {
        BOOL (*GSFontAddFromFile)(const char *) = dlsym(graphicsServices, "GSFontAddFromFile");
        if (GSFontAddFromFile)
            for (NSString *fontFile in [[NSBundle mainBundle] pathsForResourcesOfType:@"ttf" inDirectory:nil])
                newFontCount += GSFontAddFromFile([fontFile UTF8String]);
    }
}

return newFontCount;}


 - (id)initWithCoder:(NSCoder *)decoder {
    //load the fonts
    [self loadFonts];

    if (self = [super initWithCoder: decoder]) {
        [self setFont: [UIFont fontWithName: @"Quake" size: self.font.pointSize]];
    }

    return self;
}

Надеюсь, это сработает.

2 голосов
/ 19 мая 2010

Открыл отчет об ошибках в Apple и выяснил, что это действительно ошибка. Обходной путь, который я использовал в итоге, таков:

// LabelQuake.h
@interface LabelQuake : UILabel
@end

// LabelQuake.m
@implementation LabelQuake

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

        return self;
    }
@end

Написал немного больше поста в нашем блоге .

1 голос
/ 05 января 2011

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

for (UIView *v in view.subviews) {

    if ([v isKindOfClass:[UILabel class]]) {
      UILabel *label = (UILabel*)v;

      [label setFont:[UIFont fontWithName:@"Quake" size:label.font.pointSize]];
    }
}

Я поместил это во вспомогательный класс и просто вызвал его, передав мой текущий вид.

...