iOS中字体的使用
来源:互联网 发布:java接口和引用 编辑:程序博客网 时间:2024/04/29 04:11
有三种方式:
一、使用系统随附的字体
在使用之前,先把支持的所有字体打印出来,确保存在再使用:
// 打印所有的系统已存在的字体static void dumpAllFonts() { NSInteger totalCount; for (NSString *familyName in [UIFont familyNames]) { NSArray *familyNameArr = [UIFont fontNamesForFamilyName:familyName]; NSLog(@"familyName:%@ count=%ld", familyName,[familyNameArr count]); NSInteger tempCount = [familyNameArr count]; totalCount += tempCount; for (NSString *fontName in familyNameArr) { NSLog(@"++++ %@", fontName); } } NSLog(@"totalCount=%ld",totalCount);}
使用就很简单了:
[UIFont fontWithName:@"字体的名字" size:14]
二、从外界拖进来的静态字体(也就是你的UI给你的字体,.ttf或者.ttc等格式的文件)
在使用前双击资源文件,mac会默认用‘字体册’打开,这时你会看到一些相关信息:
接下来就是开始了:
1、把资源拖进工程
2、TARGETS->Info->添加‘Fonts provide by application’项,如下:
3、TARGETS->Build Phases ->Copy Bundle Resources
4、到这里再次打印所有的字体,应该可以找到目标字体名,然后就可以像使用已存在的系统字体那样使用了。
三、下载系统字体使用
使用系统的API先把字体下载下来,然后就可以像普通已安装字体使用了。
这里是App可以根据需要安装的字体:https://support.apple.com/zh-cn/HT202599
这里是苹果提供的Demo:https://support.apple.com/zh-cn/HT202599
我是把下载字体的api简单地封装了一下,AsyDownloadSystemFont:
/** * 下载系统提供的字体 (异步) */#import <Foundation/Foundation.h>#import <UIKit/UIKit.h>typedef void(^DownloadingBlock)(CGFloat progressValue);typedef void(^DownloadSuccessBlock)(void);typedef void(^DownloadErrocBlock)(NSString *errorMsg);@interface AsyDownloadSystemFont : NSObject/** * 判断该字体有没有下载过 * * @param fontName 字体名字 (不是文件夹的名字) * * @return Yes:已经下载过 NO:没有下载过 */+(BOOL)isExistWithFontName:(NSString *)fontName;/** * 异步下载系统提供的字体 * * @param fontName 字体名字 (不是文件夹的名字) * @param loadingCallBack 下载中的回调 (可以改变进度条的值) * @param sucessCallBack 下载成功的回调 (可以进行UI刷新) * @param errorCalBack 下载失败的回调 */+(void)asyDownLoadFontWithFontName:(NSString *)fontName downloading:(DownloadingBlock)loadingCallBack downloadSuccess:(DownloadSuccessBlock)sucessCallBack downloadError:(DownloadErrocBlock)errorCalBack;@end#import "AsyDownloadSystemFont.h"#import <CoreText/CoreText.h>@implementation AsyDownloadSystemFont#pragma mark - Public Methods+(BOOL)isExistWithFontName:(NSString *)fontName { UIFont *aFont = [UIFont fontWithName:fontName size:12.]; if (aFont && ([aFont.fontName compare:fontName] == NSOrderedDescending || [aFont.familyName compare:fontName] == NSOrderedSame)) { NSLog(@"存在"); return YES; } NSLog(@"不存在"); return NO;}+(void)asyDownLoadFontWithFontName:(NSString *)fontName downloading:(DownloadingBlock)loadingCallBack downloadSuccess:(DownloadSuccessBlock)sucessCallBack downloadError:(DownloadErrocBlock)errorCalBack { //1、准备参数 //用字体的PostScript名字创建一个NSDicitonary NSMutableDictionary *attrs = [NSMutableDictionary dictionaryWithObjectsAndKeys:fontName, kCTFontNameAttribute,nil]; //创建一个字体描述对象 CTFontDescriptorRef CTFontDescriptorRef desc = CTFontDescriptorCreateWithAttributes((__bridge CFDictionaryRef)attrs); //将字体描述对象放到一个NSMutableArray中 NSMutableArray *descs = [NSMutableArray arrayWithCapacity:0]; [descs addObject:(__bridge id)desc]; CFRelease(desc); //2、开始下载 CTFontDescriptorMatchFontDescriptorsWithProgressHandler((__bridge CFArrayRef)descs, NULL, ^bool(CTFontDescriptorMatchingState state, CFDictionaryRef _Nonnull progressParameter) { __block BOOL errorDuringDownload = NO; double progressValue = [[(__bridge NSDictionary *)progressParameter objectForKey:(id)kCTFontDescriptorMatchingPercentage] doubleValue]; if (state == kCTFontDescriptorMatchingDidBegin) { //字体已经匹配 NSLog(@"字体已经匹配"); }else if (state == kCTFontDescriptorMatchingDidFinish) { if (!errorDuringDownload) { //字体下载完成 NSLog(@"字体下载完成 -"); dispatch_async(dispatch_get_main_queue(), ^{ if (sucessCallBack) { sucessCallBack(); } }); } }else if (state == kCTFontDescriptorMatchingWillBeginDownloading) { //字体开始下载 }else if (state == kCTFontDescriptorMatchingDidFinishDownloading) { //字体下载完成 (可以在这里修改UI) NSLog(@"字体下载完成 (可以在这里修改UI"); dispatch_async(dispatch_get_main_queue(), ^{ if (sucessCallBack) { sucessCallBack(); } }); }else if (state == kCTFontDescriptorMatchingDownloading) { //下载中 NSLog(@"下载中"); dispatch_async(dispatch_get_main_queue(), ^{ if (loadingCallBack) { loadingCallBack(progressValue); } }); }else if (state == kCTFontDescriptorMatchingDidFailWithError) { NSString *errorMsg; NSError *error = [(__bridge NSDictionary *)progressParameter objectForKey:(id)kCTFontDescriptorMatchingError]; if (!error) { errorMsg = [errorMsg description]; }else { errorMsg = @"Error Message Is Not Available!"; } dispatch_async(dispatch_get_main_queue(), ^{ if (errorCalBack) { errorCalBack(errorMsg); } }); NSLog(@"errorMsg=%@",errorMsg); //设置标志 errorDuringDownload = YES; } return YES; });}@end
下面就是具体的使用:
#import "DynamicViewController.h"#import "AsyDownloadSystemFont.h"#import "UIView+FrameHelp.h"static NSArray *kFontNames() { NSArray *fontNames = nil; if (!fontNames) { fontNames = @[ @"STXingkai-SC-Light", @"DFWaWaSC-W5", @"FZLTXHK--GBK1-0", @"STLibian-SC-Regular", @"LiHeiPro", @"HiraginoSansGB-W3" ]; } return fontNames;}static NSArray *kFontSamples() { NSArray *fontSamples = nil; if (!fontSamples) { fontSamples = @[ @"汉体书写信息技术标准相", @"容档案下载使用界面简单", @"支援服务升级资讯专业制", @"作创意空间快速无线上网", @"兙兛兞兝兡兣嗧瓩糎", @"㈠㈡㈢㈣㈤㈥㈦㈧㈨㈩" ]; } return fontSamples;}@interface DynamicViewController () <UITableViewDataSource,UITableViewDelegate>{ NSString *_fontName;}@property (nonatomic, retain) UITableView *kTableView;@property (nonatomic, retain) UIProgressView *kProgress;@property (nonatomic, retain) UITextView *kTextView;@property (nonatomic, retain) UIActivityIndicatorView *kActivityView;@end@implementation DynamicViewController#pragma mark - Life Cycle- (void)viewDidLoad { [super viewDidLoad]; [self uiConfig];}#pragma mark - UITableViewDataSource-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return [kFontNames() count];}-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { NSArray *fontName = kFontNames(); static NSString *cellId = @"cellId"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId]; if (!cell) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellId]; } cell.textLabel.text = [fontName objectAtIndex:indexPath.row]; return cell;}#pragma mark - UITableViewDelegate-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { [tableView deselectRowAtIndexPath:indexPath animated:YES]; _fontName = [kFontNames() objectAtIndex:indexPath.row]; BOOL isExist = [AsyDownloadSystemFont isExistWithFontName:_fontName]; if (isExist) { NSString *text = [kFontSamples() objectAtIndex:indexPath.row]; [self refrshTextViewWithText:text]; }else { NSString *samples = [kFontSamples() objectAtIndex:indexPath.row]; [AsyDownloadSystemFont asyDownLoadFontWithFontName:_fontName downloading:^(CGFloat progressValue) { [self.kProgress setHidden:NO]; self.kProgress.progress = progressValue/100; [self.kActivityView startAnimating]; } downloadSuccess:^{ [self.kProgress setHidden:YES]; [self.kActivityView stopAnimating]; [self refrshTextViewWithText:samples]; } downloadError:^(NSString *errorMsg) { [self.kProgress setHidden:YES]; [self.kActivityView stopAnimating]; NSLog(@"errorMsg=%@",errorMsg); }]; }}-(void)refrshTextViewWithText:(NSString *)text { self.kTextView.font = [UIFont fontWithName:_fontName size:14.]; self.kTextView.text = text;}#pragma mark - Private Methods-(void)uiConfig { self.view.backgroundColor = [UIColor whiteColor]; self.kTableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, self.view.width, 400) style:UITableViewStylePlain]; self.kTableView.tableFooterView = [UIView new]; self.kTableView.dataSource = self; self.kTableView.delegate = self; self.kProgress = [[UIProgressView alloc] initWithFrame:CGRectMake((self.view.width-150)/2, self.view.height-100, 150, 10)]; self.kProgress.userInteractionEnabled = NO; [self.kProgress setHidden:YES]; self.kTextView = [[UITextView alloc] initWithFrame:CGRectMake((self.view.width-150)/2, self.view.height-150, 150, 30)]; self.kActivityView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; self.kActivityView.hidesWhenStopped = YES; [self.view addSubview:self.kTableView]; [self.view addSubview:self.kProgress]; [self.view addSubview:self.kTextView]; self.navigationItem.titleView = self.kActivityView;}@end
0 0
- iOS中字体的使用
- ios中使用自定义的字体
- ios中使用自己添加的字体
- iOS中使用自定义字体
- iOS中使用特殊字体
- iOS游戏开发中使用自定义字体的方法
- IOS(xcode)程序中使用自定义字体的方法
- IOS(xcode)程序中使用自定义字体的方法
- IOS(xcode)程序中使用自定义字体的方法
- iOS 中如何添加应用自己的字体,使用萍方体
- IOS 如何在工程中使用自己喜欢的字体
- iOS中使用自定义ttf/ttc字体,以及cocosbuilder中指定字体的方法
- iOS系统字体大全,iOS系统中所有的字体
- ios开发中使用自定义字体
- 在iOS开发中使用自定义字体
- 在iOS开发中使用自定义字体
- iOS中使用第三方字体
- 在iOS开发中使用自定义字体
- 碰撞体和刚体
- poj1661【DP,左右两端dp】
- 手机更新IOS10系统之后,锁屏界面显示:33年6月*日
- 网络框架构建
- JAVA学习随笔(3)-一些基本概念
- iOS中字体的使用
- Docker for Windows初步体验
- cocos 项目棋魂
- mybatis 面试题
- Android EventBus3.0使用及源码解析
- Docker Swarm集群实践——管理篇
- 二分图(未完。。)
- 计算几何与图形学有关的几种常用算法
- Cortex-M3启动代码分析