iOS 字体下载

iOS可以动态的为系统下载字体,这些字体都下载到了系统的目录下,并且可以被其他应用公用

来看下如何实现动态下载:

 // 创建下载字体请求描述的准备
    NSMutableDictionary *attrs = [NSMutableDictionary dictionaryWithObjectsAndKeys:fontName, kCTFontNameAttribute, nil];
    CTFontDescriptorRef desc = CTFontDescriptorCreateWithAttributes((__bridge CFDictionaryRef)attrs);
    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(), ^ {
                // Show an activity indicator
                [_fActivityIndicatorView startAnimating];
                _fActivityIndicatorView.hidden = NO;

                // Show something in the text view to indicate that we are downloading
                _fTextView.text= [NSString stringWithFormat:@"Downloading %@", fontName];
                _fTextView.font = [UIFont systemFontOfSize:14.];

                NSLog(@"开始匹配...");
            });
        } else if (state == kCTFontDescriptorMatchingDidFinish) {
            dispatch_async( dispatch_get_main_queue(), ^ {
                // Remove the activity indicator
                [_fActivityIndicatorView stopAnimating];
                _fActivityIndicatorView.hidden = YES;

                // Display the sample text for the newly downloaded font
                NSUInteger sampleIndex = [_fontNames indexOfObject:fontName];
                _fTextView.text = [_fontSamples objectAtIndex:sampleIndex];
                _fTextView.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
                _fProgressView.progress = 0.0;
                _fProgressView.hidden = NO;
                NSLog(@"开始下载...");
            });
        } else if (state == kCTFontDescriptorMatchingDidFinishDownloading) {
            dispatch_async( dispatch_get_main_queue(), ^ {
                // Remove the progress bar
                _fProgressView.hidden = YES;
                NSLog(@"下载完成");
            });
        } else if (state == kCTFontDescriptorMatchingDownloading) {
            dispatch_async( dispatch_get_main_queue(), ^ {
                // Use the progress bar to indicate the progress of the downloading
                [_fProgressView setProgress:progressValue / 100.0 animated:YES];
                NSLog(@"下载进度 %.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(), ^ {
                _fProgressView.hidden = YES;
                NSLog(@"下载失败: %@", _errorMessage);
            });
        }

        return (bool)YES;
    });
  NSString *ffontName = @"STBaoli-SC-Regular";
    UIFont* aFont = [UIFont fontWithName:fontName size:12.];

    // 判断字体是否已经下载
    if (aFont && ([aFont.fontName compare:fontName] == NSOrderedSame || [aFont.familyName compare:fontName] == NSOrderedSame)) {
        // 使用已下载的字体
        NSUInteger sampleIndex = [_fontNames indexOfObject:fontName];
        _fTextView.text = [_fontSamples objectAtIndex:sampleIndex];
        _fTextView.font = [UIFont fontWithName:fontName size:24.];
        return;
    }

原文地址:https://www.cnblogs.com/hualuoshuijia/p/10654103.html

时间: 2024-10-15 10:36:46

iOS 字体下载的相关文章

IOS字体下载

结合书本与苹果官方给的例子后,总结下下载的方法. 苹果给我们提供了很多漂亮的字体,只是有些字体设备并没有内置,需要我们去下载才行. 系统提供给我们的字体名我们可以通过mac系统提供的字体册来查阅. 得到我们想要的字体后就可以在我们的设备上进行下载了.这里要说一下,设备字体下载后是所有应用都可以使用的,而且字体的目录并不是我们APP的目录,因此并不会增大我们应用所需的空间. 这里结合着苹果官方所给例子来简述一下(官方例子): 事例中给我们预定了几种字体来让我们下载 1 - (void)viewDi

ios字体动态下载

一.IOS字体 动态下载字体,不仅可以减少APP包的大小,而且字体在iOS系统中是公共的,可共用的.所以如果自己用到的字体已经下载字体,就不用再次下载.还有就是系统提供的字体是iOS维护的.如果用到第三方字体,不仅字体大小对流量.包大小有影响,而且会有版权等的诸多限制.真机下载后的字体路径是在 file:///private/var/MobileAsset/Assets/com_apple_MobileAsset_Font2/25eb7390708d494864eef0905635e1dc3f2

iOS 字体详解

一.iOS原生字体获取及展示 1.xib/storyboard 图形展示 拖拽创建一个Label控件,选中该Label,在设置中把Label字体System修改为自定义(custom),然后点击family选框,可以查看到所有的原生字体. 2.代码获取字体及设置 很多时候我们是用纯代码进行编程,这时我们该如何设置文本字体呢? 其实我们可以用两个for循环取出所有的字体名称,然后根据自己的需求去设置字体. 获取所有字体名称代码: 1 - (void)getAllFont{ 2 for (NSStr

一文让你彻底了解iOS字体相关知识

作者:董铂然 授权本站转载. 写本文的契机主要是把自己整理的关于iOS字体方面的知识不断更新写在这篇博文中,用来自己以后查阅. 一.iOS原生字体展示 在 label中选择字体的font,并把font由system改成custom后,就能在family中看到72种特殊字体.这些里面就有很炫的字体,但 是全部是只针对英文数字,对中文无效.写了一个程序把所有的原生样式遍历出来展示可以达到如下效果.可以清楚地看到每个字体对应的样式,不用再一个个试 了. 如果你不是在董铂然博客园看到本文,请点击查看原文

IOS文件分段下载

HTTP HEAD 生成方法 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:0 timeoutInterval:kTimeout]; request.HTTPMethod = @"HEAD"; [NSURLConnection sendAsynchronousRequest:request queue:self.myQueue completionHandler:^(

120个ps常用的好看的英文艺术字体下载分享

全部为 ttf 格式字体,可以安装到系统中使用.1.ps好看的英文字体英文字体.atomic_sushi.ttf字体下载 2.ps好看的英文字体.arcade_pizzadude.ttf字体下载 3.ps好看的英文字体.angelina.ttf字体下载 4.ps好看的英文字体.andrew_script.ttf字体下载 5.ps好看的英文字体.andover.ttf字体下载 6.ps好看的英文字体.anarchy.ttf字体下载 7.ps好看的英文字体.butteler.ttf字体下载 8.ps

字体下载大宝库:12款好看的免费英文字体

互联网上90%的信息是文本形式的,这就是设计师为什么不断的创造漂亮的字体,让网站中的的内容更加美观.此外,还有大量的印刷为基础的项目,其中的字体都是关键因素.今天这个列表中,我们选择了21款免费的英文字体分享给设计师们. 您可能感兴趣的相关文章 字体大宝库:10款有趣的精美节日字体 分享20款很漂亮的免费英文LOGO字体 字体大宝库:20款充满艺术感英文字体 推荐20款免费的又好看的英文手写字体 向设计师推荐20款好看的英文装饰字体 Gilroy Typefamily Fredoka Free

字体下载大宝库:30款好看的免费英文字体

互联网上将近90%的信息是文本形式的,大概这就是设计师为什么不断创造美丽的字体,让网站中的的内容更加美观.此外,还有大量的印刷为基础的项目,其中的字体都是关键因素.今天这个列表中,我们选择了30款最佳的免费字体分享给设计师,选择你喜欢的字体下载! 您可能感兴趣的相关文章 字体大宝库:10款有趣的精美节日字体 分享20款很漂亮的免费英文LOGO字体 字体大宝库:20款充满艺术感英文字体 推荐20款免费的又好看的英文手写字体 向设计师推荐20款好看的英文装饰字体 1. Born 2. Exo 3.

UI设计规范整理一iOS字体和切图及规范

UI设计规范一iOS字体和切图及规范 说明: 1.对象为程序员等开发人员. 2.方法有千种,仅供参考. 3.文档的本质是备份与查看,对外方便协作与对内提升效率. 4.文档不是万能的,如果文档查看对象看不懂,就没任何意义.我喜欢当面沟通,因为能避免大部分文档的局限性 规范 一.字体 我个人设计时按照iOS设计尺寸 iPhone6(750px*1334px)来进行页面的设计.在iOS开发中iPhone4.5.6.7是共用一套字体规范.在设计中按iPhone6设计版尺寸(750px*1334px)中适