iPhone SDK 3.2和UIAppFonts
我已经将我的自定义字体添加到UIAppFonts,并且它的加载非常好:(显示在[UIFont familyNames]
)。 当我手动设置字体在viewDidLoad { [myLabel setFont: [UIFont fontWithName:@"CustomFont" size: 65.0]]; }
viewDidLoad { [myLabel setFont: [UIFont fontWithName:@"CustomFont" size: 65.0]]; }
一切正常,呈现字体。
但是,在IB中做同样的事情不会(使用其他一些默认字体)。 必须为每个标签创建IBOutlets并在viewDidLoad中手动修复字体是非常痛苦的。
任何人都有问题获得自定义字体支持使用3.2 SDK和IB?
打开一个与苹果公司的错误报告,并发现它确实是一个错误。 我最终使用的解决方法是:
// 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
在我们的博客上写了一段更长的帖子。
有类似的问题,并以这种方式修复它...
将我的自定义字体添加到我的资源组。 然后按照下面给出的代码加载所有字体:
- (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;
}
希望它能起作用。
如果你不想子类化,这个解决方案对我来说很快而且很脏。 当然,它假设所有的标签都具有相同的字体,在我的情况下是这样。
for (UIView *v in view.subviews) {
if ([v isKindOfClass:[UILabel class]]) {
UILabel *label = (UILabel*)v;
[label setFont:[UIFont fontWithName:@"Quake" size:label.font.pointSize]];
}
}
我把它放在一个助手类中,只是调用它,传递我当前的观点。
链接地址: http://www.djcxy.com/p/47001.html