教你如何在iOS项目中设置各种字体
原文地址为: 教你如何在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 indicator NSLog(@"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 console CTFontRef 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 downloading NSLog(@"Downloading %.0f%% complete", progressValue); }); } else if (state == kCTFontDescriptorMatchingDidFailWithError) {// An error has occurred.// Get the error message NSError *error = [(__bridge NSDictionary *)progressParameter objectForKey:(id)kCTFontDescriptorMatchingError];if (error != nil) { _errorMessage = [error description]; } else { _errorMessage = @"ERROR MESSAGE IS NOT AVAILABLE!"; }// Set our flag errorDuringDownload = 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项目中设置各种字体
教你如何在iOS项目中设置各种字体相关推荐
- 如何在vue项目中设置首页
如何在vue项目中设置首页 1.首先创建一个vue为后缀名的文件,最好在新建的文件夹下面创建,如下图所示: 说明:一般我们的主要页面代码都是写在vue 项目中的这个src文件夹下,项目中所会引用到的组 ...
- 一步步教你如何在SpringBoot项目中引入支付功能
听说微信搜索<Java鱼仔>会变更强哦! 本文收录于JavaStarter ,里面有我完整的Java系列文章,学习或面试都可以看看哦 (一)引言 支付功能如今已经成为一个需要盈利的网站的基 ...
- iOS项目中使用第三方字体
需要将一个漂亮的字体文件用到自己的项目中,怎么办? 一.将字体文件(.TTF)加入到项目中,自己顶一个目录就好 二.修改info.plist 三.检查是否可用 如果在代码中用UIFont等添加字体,字 ...
- java swing 字体设置_如何在Java SWING中设置自定义字体的大小和其他属性(粗体,斜体等)...
通常,当我初始化我想在SWING应用程序中使用的字体时,我这样做: public static final Font TITLEFONT = new Font("Calibri", ...
- 如何在iOS应用中使用自定义字体
最近的项目需求需要使用新的字体,而且是在 所有地方 也就是说不管是普通的cell中的label,还是导航栏中的标题,都要使用设计新给出的字体.而新的字体包含在一个ttf的文件中. 乍一听到是挺浩大的一 ...
- iSpring Suite教程:如何在iSpring Suite中设置麦克风
iSpring Suite是用于PowerPoint的完整的电子学习创作工具包.这篇文章是一篇iSpring Suite的使用教程,教您如何在iSpring Suite中设置麦克风~ 点击下载iSpr ...
- vux 显示 html,如何在vue项目中使用vux
编者:只需6步,教你如何在vue项目中使用vux, 1.在项目里安装vuxnpm install vux --save2.安装vux-loader (这个vux文档中没有明文跟你说要安装的啦) np ...
- word中字体 html,在Word 2010中设置文本字体
在本章中,我们将讨论如何在Word 2010中设置文本字体和大小.Microsoft字允许您使用不同大小的不同字体.您可以通过更改字体及其大小来更改文档的外观.通常您会为段落和标题使用不同的字体.学习 ...
- ios 动态化视图_如何在iOS应用中使高度收集视图动态化
ios 动态化视图 by Payal Gupta 通过Payal Gupta 如何在iOS应用中使集合视图的高度动态化 (How to make height of collection views ...
最新文章
- navicat对mysql的备份
- Comet OJ - Contest #2题解
- 无法启动MYSQL服务”1067 进程意外终止”解决的方法
- mysql高效索引之覆盖索引
- BUUCTF(pwn)铁人三项(第五赛区)_2018_rop
- unable to access ‘https://github.com/***.git‘: OpenSSL SSL_read: Connection was reset, errno 10054
- jsp前3章试题分析
- 肺功能曲线图怎么看_【家装干货】有人说是鸡肋,有人说是功能升级,卫生间装双人洗漱台,你怎么看?...
- disabled运用;div,li元素禁用点击事件;防止a标签打开url;禁用click事件,删除onclick
- 经典公司小型局域网服务器架设方案
- 程序下载至开发板 芯片超时无应答,无法连接
- 【EDA】Mutisim基于Multisim的带通滤波器仿真设计实验
- Android RTSP IPC的使用
- VastBase账户锁The account has been locked
- pandas按条件筛选数据
- win10企业版2016长期服务激活教程
- 【博闻强记】eclipse背景色的更改
- 实验记录 | 为什么mtDNA的fastq数据会比对到常染色体上?
- 至联云课堂:隐私泄露屡禁不止,根本原因其实是...
- 2023年考ACP云计算