【读书笔记】UIFont-动态下载系统提供的字体-官方代码

王朝学院·作者佚名  2016-08-27  
宽屏版  字体: 小 | 中 | 大 | 超大  

一,工程目录

二,AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

// Override point for customization after application launch.

ViewController *view=[[ViewController alloc]init];

UINavigationController *nav=[[UINavigationController alloc]initWithRootViewController:view];

self.window.backgroundColor=[UIColor whiteColor];

self.window.rootViewController=nav;

return YES;

}

三,ViewController.h

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController

<UITableViewDelegate,UITableViewDataSource>

{

UITableView *myTableView;

NSArray *fontNames;

NSArray *fontSamples;

}

@end

四, ViewController.m

#import "ViewController.h"

#import <CoreText/CoreText.h>

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

//初始化数据

[self addData];

//初始化界面

[self addView];

}

#PRagma -mark -functions

//初始化界面

-(void)addView

{

myTableView=[[UITableView alloc]initWithFrame:CGRectMake(0, 100, 320, 200)];

myTableView.delegate=self;

myTableView.dataSource=self;

[self.view addSubview:myTableView];

}

//初始化数据

-(void)addData

{

fontNames = [[NSArray alloc] initWithObjects:

@"STXingkai-SC-Light",

@"DFWaWaSC-W5",

@"FZLTXHK--GBK1-0",

@"STLibian-SC-Regular",

@"LiHeipro",

@"HiraginoSansGB-W3",

nil];

fontSamples = [[NSArray alloc] initWithObjects:

@"汉体书写信息技术标准相",

@"容档案下载使用界面简单",

@"支援服务升级资讯专业制",

@"作创意空间快速无线上网",

@"兙兛兞兝兡兣嗧瓩糎",

@"㈠㈡㈢㈣㈤㈥㈦㈧㈨㈩",

nil];

}

#pragma -mark -UITableViewDelegate

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

{

return [fontNames count];

}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

{

static NSString *MyIdentifier = @"MyIdentifier";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];

if (cell == nil) {

cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:MyIdentifier];

}

cell.textLabel.text = fontNames[indexPath.row];

return cell;

}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

{

[self asynchronouslySetFontName:fontNames[indexPath.row]];

}

#pragma -mark -functions

//字体开始进行下载

- (void)asynchronouslySetFontName:(NSString *)fontName

{

UIFont* aFont = [UIFont fontWithName:fontName size:12.];

//判断字体是否已经被下载

if (aFont && ([aFont.fontName compare:fontName] == NSOrderedSame || [aFont.familyName compare:fontName] == NSOrderedSame)) {

NSLog(@"字体已经被下载");

return;

}

//用字体的PostScript名字创建一个Dictionary

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);

__block BOOL errorDuringDownload = NO;

//开始对字体进行下载

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(), ^ {

NSLog(@"字体已经匹配");

});

} else if (state == kCTFontDescriptorMatchingDidFinish) {

dispatch_async( dispatch_get_main_queue(), ^ {

NSLog(@"字体下载完成");

// Log the font URL in the console

CTFontRef fontRef = CTFontCreateWithName((__bridge CFStringRef)fontName, 0., NULL);

CFStringRef fontURL = CTFontCopyAttribute(fontRef, kCTFontURLAttribute);

CFRelease(fontURL);

CFRelease(fontRef);

if (!errorDuringDownload) {

NSLog(@"%@ downloaded", fontName);

}

});

} else if (state == kCTFontDescriptorMatchingWillBeginDownloading) {

dispatch_async( dispatch_get_main_queue(), ^ {

NSLog(@"字体开始下载");

});

} else if (state == kCTFontDescriptorMatchingDidFinishDownloading) {

dispatch_async( dispatch_get_main_queue(), ^ {

NSLog(@"字体下载完成");

});

} else if (state == kCTFontDescriptorMatchingDownloading) {

dispatch_async( dispatch_get_main_queue(), ^ {

NSLog(@"下载进度");

});

} else if (state == kCTFontDescriptorMatchingDidFailWithError) {

NSLog(@"下载失败");

NSError *error = [(__bridge NSDictionary *)progressParameter objectForKey:(id)kCTFontDescriptorMatchingError];

if (error != nil) {

NSLog(@"errorMessage--%@-",[error description]);

} else {

NSLog(@"error message is not available");

}

errorDuringDownload = YES;

dispatch_async( dispatch_get_main_queue(), ^ {

NSLog(@"Download error: %@", [error description]);

});

}

return (bool)YES;

});

}

- (void)didReceiveMemoryWarning {

[super didReceiveMemoryWarning];

// Dispose of any resources that can be recreated.

}

@end

参考资料:《iOS开发进阶》 -唐巧

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有