zoukankan      html  css  js  c++  java
  • 【读书笔记】iOS-UIFont-动态下载系统提供的字体-官方代码

    一,工程目录

     

     

    二,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开发进阶》 -唐巧

     

     
     
  • 相关阅读:
    P1007 独木桥
    P1789 【Mc生存】插火把
    P2658 汽车拉力比赛
    1959 拔河比赛
    P1936 水晶灯火灵
    websocket
    瀑布流布局
    Router
    图片占位
    单位
  • 原文地址:https://www.cnblogs.com/yang-guang-girl/p/4692890.html
Copyright © 2011-2022 走看看