转自:http://www.cnblogs.com/jijiYY/p/4736967.html

教你如何在iOS项目中设置各种字体

在iOS开发中设置字体的方法有很多种,下面为大家介绍比较常用的三种方法

1.使用系统默认提供的字体

系统默认提供的字体主要是指UIFont中提供的字体,其使用代码为:

fontLabel.font = [UIFont fontWithName:@"Marion" size:17];

或者是通过字体详细字典对字体属性进行设置

/*UIFontDescriptorFamilyAttribute:设置字体家族名UIFontDescriptorNameAttribute  :设置字体的字体名UIFontDescriptorSizeAttribute  :设置字体尺寸UIFontDescriptorMatrixAttribute:设置字体形变*/UIFontDescriptor *attributeFontDescriptor = [UIFontDescriptor fontDescriptorWithFontAttributes:@{UIFontDescriptorFamilyAttribute: @"Marion",UIFontDescriptorNameAttribute:@"Marion-Regular",UIFontDescriptorSizeAttribute: @40.0,UIFontDescriptorMatrixAttribute:[NSValue valueWithCGAffineTransform:CGAffineTransformMakeRotation(M_1_PI*1.5)]}];fnotLabel.font = [UIFont fontWithDescriptor:attributeFontDescriptor size:0.0];

其中的字体家族名和字体名可以通过以下方法获取

NSLog(@"familyNames:%@",[UIFont familyNames]);

以上两种方法均可以为label设置字体,但是全部是只针对英文数字,对中文无效。要想改变中文字体还需要使用后面两种办法

2.动态下载字体

iOS6以后苹果就开始支持动态下载中文字体已供应用中展示个性字体的需求,由于下载的时候需要使用的名字是PostScript名称,需要使用Mac内自带的应用“字体册“来获得相应字体的PostScript名称。如下显示了从”字体册“中获取《娃娃体-繁 常规体》字体的PostScript名称的截图

具体代码就不一一介绍了,大家可以参考苹果提供的有关文档:https://developer.apple.com/library/ios/samplecode/DownloadFont/Listings/DownloadFont_ViewController_m.html#//apple_ref/doc/uid/DTS40013404-DownloadFont_ViewController_m-DontLinkElementID_6

或者也可以参考唐巧先生的博客有比较详细的介绍:http://blog.devtang.com/blog/2013/08/11/ios-asian-font-download-introduction/

下面是我研究后的测试demo,提供给大家参考:

- (void)asynchronouslySetFontName:(NSString *)fontName
{UIFont* aFont = [UIFont fontWithName:fontName size:24];// If the font is already downloadedif (aFont && ([aFont.fontName compare:fontName] == NSOrderedSame || [aFont.familyName compare:fontName] == NSOrderedSame)) {// Go ahead and display the sample text._fLabelView.text = @"欢迎查看我的博客";_fLabelView.font = [UIFont fontWithName:fontName size:24];return;}// Create a dictionary with the font's PostScript name.NSMutableDictionary *attrs = [NSMutableDictionary dictionaryWithObjectsAndKeys:fontName, kCTFontNameAttribute, nil];// Create a new font descriptor reference from the attributes dictionary.CTFontDescriptorRef desc = CTFontDescriptorCreateWithAttributes((__bridge CFDictionaryRef)attrs);NSMutableArray *descs = [NSMutableArray arrayWithCapacity:0];[descs addObject:(__bridge id)desc];CFRelease(desc);__block BOOL errorDuringDownload = NO;// Start processing the font descriptor..// This function returns immediately, but can potentially take long time to process.// The progress is notified via the callback block of CTFontDescriptorProgressHandler type.// See CTFontDescriptor.h for the list of progress states and keys for progressParameter dictionary.CTFontDescriptorMatchFontDescriptorsWithProgressHandler( (__bridge CFArrayRef)descs, NULL,  ^(CTFontDescriptorMatchingState state, CFDictionaryRef progressParameter) {//NSLog( @"state %d - %@", state, progressParameter);double progressValue = [[(__bridge NSDictionary *)progressParameter objectForKey:(id)kCTFontDescriptorMatchingPercentage] doubleValue];if (state == kCTFontDescriptorMatchingDidBegin) {dispatch_async( dispatch_get_main_queue(), ^ {// Show an activity indicatorNSLog(@"Begin Matching");});} else if (state == kCTFontDescriptorMatchingDidFinish) {dispatch_async( dispatch_get_main_queue(), ^ {// Remove the activity indicator// Display the sample text for the newly downloaded font_fLabelView.text = @"欢迎查看我的博客";_fLabelView.font = [UIFont fontWithName:fontName size:24];// Log the font URL in the consoleCTFontRef fontRef = CTFontCreateWithName((__bridge CFStringRef)fontName, 0., NULL);CFStringRef fontURL = CTFontCopyAttribute(fontRef, kCTFontURLAttribute);NSLog(@"%@", (__bridge NSURL*)(fontURL));CFRelease(fontURL);CFRelease(fontRef);if (!errorDuringDownload) {NSLog(@"%@ downloaded", fontName);}});} else if (state == kCTFontDescriptorMatchingWillBeginDownloading) {dispatch_async( dispatch_get_main_queue(), ^ {// Show a progress bar
             NSLog(@"Begin Downloading");});} else if (state == kCTFontDescriptorMatchingDidFinishDownloading) {dispatch_async( dispatch_get_main_queue(), ^ {// Remove the progress bar
NSLog(@"Finish downloading");});} else if (state == kCTFontDescriptorMatchingDownloading) {dispatch_async( dispatch_get_main_queue(), ^ {// Use the progress bar to indicate the progress of the downloadingNSLog(@"Downloading %.0f%% complete", progressValue);});} else if (state == kCTFontDescriptorMatchingDidFailWithError) {// An error has occurred.// Get the error messageNSError *error = [(__bridge NSDictionary *)progressParameter objectForKey:(id)kCTFontDescriptorMatchingError];if (error != nil) {_errorMessage = [error description];} else {_errorMessage = @"ERROR MESSAGE IS NOT AVAILABLE!";}// Set our flagerrorDuringDownload = YES;dispatch_async( dispatch_get_main_queue(), ^ {NSLog(@"Download error: %@", _errorMessage);});}return (bool)YES;});
}

只要在相应地方调用就可以了:

- (void)viewDidLoad {[super viewDidLoad];// Do any additional setup after loading the view, typically from a nib._fLabelView = [[UITextView alloc] initWithFrame:CGRectMake(50, 100, 250, 100)];[self.view addSubview:_fLabelView];[self asynchronouslySetFontName:@"HanziPenSC-W3"];}

下面是运行后的结果:

3.引入外部字体

现在网上不管是windows字体,还是Android字体只要是ttf格式的,或者是苹果提供的ttc、otf格式,一般iOS程序都支持内嵌。具体做法:

先将需要下载的字体拖到项目中

在info文件中添加相应字段

然后就可以使用上面提供的方法[UIFont fontWithName:@"迷你简咪咪" size:17]方法给英文、数字或者中文设置上这种字体。可以输出一下[UIFont familyNames]检测是否已经添加

也可以在xib中为label设置这种字体了

网上下载的字体也不一定都是可以使用,下面提供大家一些常用字体供大家下载:

链接: http://pan.baidu.com/s/1kTVX8qF 密码: vdwa

要想获取更加全面的字体还可以使用苹果自己提供的各种字体格式,还是可以通过Mac应用“字体侧”获取,例如:

用法跟下载的字体一样

iOS 在线下载字体相关推荐

  1. iOS 动态下载系统提供的多种中文字体

    作者刘文涛 转载请注明出处 一.功能简介 1.前言 为了实现更好的字体效果,有些应用在自己的应用资源包中加入了字体文件.但自己打包字体文件比较麻烦,原因在于: 1.字体文件通常比较大,10~20M是常 ...

  2. iOS 6:动态下载字体

    2019独角兽企业重金招聘Python工程师标准>>> iOS 6:字体列表 了解 iOS 6 中所使用的字体. iOS 6 随附安装了下列字体: Academy Engraved ...

  3. ios动态下载多种中文字体

    引言 在今年 WWDC 的内容公开之前,大家都以为 iOS 系统里面只有一种中文字体.为了达到更好的字体效果,有些应用在自己的应用资源包中加入了字体文件.但自己打包字体文件比较麻烦,原因在于: 1.字 ...

  4. iOS 动态下载系统的中文字体

    /** APP中加入文件字体,使自己打包文件字体比较麻烦,原因在于: 1.字体库文件一般比较大,对于一般的APP相当于体积翻倍了,得不偿失 2.中文字体通常都有版权,需要处理相应的版权问题 所以我们可 ...

  5. 织梦在线艺术字体转换生成平台网站源码

    简介: 织梦dedecms在线艺术字体转换生成平台网站源码 支持自己添加字体,在线艺术字体转换器,织梦内核艺术字体在线生成,在线转换,在线设计源码定制带全部数据版 本程序为客户定制 带全站数据 ,此源 ...

  6. ios 抓娃娃开发_我爱抓娃娃appiOS版下载_我爱抓娃娃iOS版下载_18183软件下载

    我爱抓娃娃iOS版下载是一款有趣的软件,喜欢的用户不要错过. 抓中几率超高,让你成为朋友圈人气王!新人注册立即送钻石,每日签到立即送钻石,在家躺着就能抓娃娃,款式多样每天上新,想抓就抓,全国均可邮寄到 ...

  7. ipa安装包通过引流下载页在线下载安装(itms-services)

    要求: 1.ipa的下载地址放到plist的文件中,链接指定plist(plist格式见下文) 2.plist的链接要求一定是https的,而且必须是公网ssl,自签名及免费的https不可用. 3. ...

  8. iOS 使用自定义字体

    现在的 APP 都极具个性与风格特点,APP界面中的文字自然也需要各种变化和改变,但是iOS 官方的字体并不能满足所有需求,下面我们就来看看如何在 iOS 的项目中使用自定义字体. iOS 系统字体可 ...

  9. ios备忘录下载安卓版_叮咚~biubiu加速器IOS国服版上线啦

    hi~biubiu的各位客官们用得还好吗?玩耍得开心吗?可能有人会问啦,啥是biubiu啊?划重点,biubiu加速器是一款功能强大的免费海外手游加速器,而且自带海量游戏库,即通过biubiu即可实现 ...

  10. 如何在线生成字体图片?怎样进行艺术字体设计?

    在进行图片设计的时候,图片上肯定会有一些文字,这些问题都需要进行设计处理,但是字体要怎样设计才能更好看呢?这里不说色彩.形状.空间感等等需要有很多设计经验的东西,如果你此刻正在为如何设计字体而发愁,那 ...

最新文章

  1. OpenCV实现遍历文件夹下所有文件
  2. IcmpBackDoor
  3. 使用Mapping实现的以太坊智能合约的代码
  4. 【收藏】QGIS加载xyz格式地图(以高德影像图和路网为例)
  5. javascript设计模式_开发者都应该了解的7种JavaScript设计模式
  6. 小便利——免密钥简单写法
  7. JAVA并发编程: CAS和AQS
  8. python3 collections模块 tree_第30天: Python collections 模块
  9. 7-Spring Boot的安全管理
  10. LeetCode 114 二叉树展开为链表
  11. 中科院计算所培训中心新一期javascript培训结束
  12. STM8L051F3_03_CLK应用
  13. 科学计算机求n次方,科学计算器怎么算n次方_科学计算器的度分秒怎么按
  14. 用nodejs搭建代理服务器
  15. CSU 1725 加尔鲁什·地狱咆哮对阵虚灵大盗拉法姆(dp)
  16. Codeforces 1324D Pair of Topics
  17. Matlab之代数方程求解:函数方程的展开与合并
  18. 基于python的flask框架自动回复抖音私信
  19. Hibernate简单配置
  20. 基金训练营学习笔记6-基金定投

热门文章

  1. 圈子圈套,何谓成功?
  2. 一步步的教你安装UChome (UChome 安装教程)
  3. 分享一个在沪深300下获得146.56%超额收益的策略
  4. scratch-www 在Win10下的环境配置
  5. Hadoop 2.6.0 FileSplit和InputSplit和FileInputFormat
  6. 关注程序员健康,使用中医十二经络来解释一个神奇的梦境!
  7. 安卓手机安装charles安全证书
  8. Mybatis_select、insert、update、delete常用属性
  9. python+nodejs+Vue体检信息管理系统项目源码
  10. 安卓逆向_2 --- Androidkiller,apktool、dex2jar、jd-gui、jadx反编译工具 的 安装、设置及使用教程