零基础 Object-C 学习路线推荐 : Object-C 学习目录 >> Object-C 基础
零基础 Object-C 学习路线推荐 : Object-C 学习目录 >> Object-C 线程
零基础 Object-C 学习路线推荐 : Object-C 学习目录 >> OpenGL ES
零基础 Object-C 学习路线推荐 : Object-C 学习目录 >> GPUImage
零基础 Object-C 学习路线推荐 : Object-C 学习目录 >> AVFoundation
零基础 Object-C 学习路线推荐 : Object-C 学习目录 >> CocoaPods
一.获取系统字体
在文章《 Object-C 获取系统字体和字体名字 》中已经有过讲解,这里不做过多解释啦!
for(NSString *fontfamilyname in [UIFont familyNames])
{
NSLog(@"family:'%@'",fontfamilyname);
for(NSString *fontName in [UIFont fontNamesForFamilyName:fontfamilyname])
{
NSLog(@"\tfont:'%@'",fontName);
}
NSLog(@"-------------");
}
二.加载 TTF/OTF/TTC 文件
1.通过修改 info.plist 文件加载字体
在工程 info.plist 添加一项 Fonts provided by application ,这是个数组,然后添加 key item1 , value 就是 TTF 文件名字,如图:
加载字体函数简介
/*
*函数描述:加载字体并返回
*
*参数:
* fontName : 字体名字,并非字体文件
* fontSize : 字体大小
*
*返回值:加载成功,返回字体,加载失败,返回nil
*/
+ (UIFont *)fontWithName:(NSString *)fontName size:(CGFloat)fontSize;
加载字体测试
UIFont *font = [UIFont fontWithName:@"MFQingShu_Noncommercial-Regular" size:12];//就能去到正确的字体。
注意:这个 fontName 不是文件名,而是里面真正的字体名,如上面的 font1.ttf 里面的字体是 MFQingShu_Noncommercial-Regular ;
2.通过代码注册到系统字体
/******************************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:Object-C 加载 TTF/OTF/TTC 文件
//@Time:2021/08/07 08:00
//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
/******************************************************************************************/
/**通过字体文件路径加载字体, 适用于 ttf ,otf,ttc
*/
+ (NSMutableArray*)customFontArrayWithPath:(NSString*)path
{
@autoreleasepool {
CFStringRef fontPath = CFStringCreateWithCString(NULL, [path UTF8String], kCFStringEncodingUTF8);
CFURLRef fontUrl = CFURLCreateWithFileSystemPath(NULL, fontPath, kCFURLPOSIXPathStyle, 0);
if(!fontPath){
CFRelease(fontUrl);
return nil;
}
CFRelease(fontPath);
NSMutableArray *customFontArray = [NSMutableArray array];
#if 0
NSArray* familys = [UIFont familyNames];
NSLog(@"%lu",(unsigned long)familys.count);
for (int i = 0; i<[familys count]; i++) {
NSString* family = [familys objectAtIndex:i];
NSArray* fonts = [UIFont fontNamesForFamilyName:family];
for (int j = 0; j<[fonts count]; j++) {
NSLog(@"FontName:%@",[fonts objectAtIndex:j]);
}
}
familys = nil;
#endif
CFArrayRef fontArray = CTFontManagerCreateFontDescriptorsFromURL(fontUrl);
//注册
CTFontManagerRegisterFontsForURL(fontUrl, kCTFontManagerScopeNone, NULL);
if(fontUrl)
CFRelease(fontUrl);
for (CFIndex i = 0 ; i < CFArrayGetCount(fontArray); i++){
CTFontDescriptorRef descriptor = (CTFontDescriptorRef)CFArrayGetValueAtIndex(fontArray, i);
CTFontRef fontRef = CTFontCreateWithFontDescriptor(descriptor, 10, NULL);
NSString *fontName = CFBridgingRelease(CTFontCopyName(fontRef, kCTFontPostScriptNameKey));
if(fontName)
[customFontArray addObject:fontName];
if(fontRef)
CFRelease(fontRef);
// if(descriptor)
// CFRelease(descriptor);
}
CFRelease(fontArray);
return customFontArray;
}
}
/*
调用
NSString* fontFile = [[NSBundle mainBundle] pathForResource:@"SIMHEI.TTF" ofType:nil];
NSMutableArray* fontArray = [self customFontArrayWithPath:fontFile];
[fontArray enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSLog(@"font name : %@",obj);
}];
输出:font name : SimHei
*/
三.猜你喜欢
- Xcode – The application’s Info.plist does not contain CFBundleShortVersionString.
- Xcode – This app has attempted to access privacy-sensitive data without a usage description.
- Xcode replace 使用正则表达式替换文字
- Object-C 获取系统字体和字体名字
- Object-C 加载 TTF/OTF/TTC 文件
- Object-C private var mobileDevice文件夹
- Object-C 保存文件到相册
ChatGPT 3.5 国内中文镜像站免费使用啦
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容