新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > iOS 7: 隐藏的特性和解决之道

iOS 7: 隐藏的特性和解决之道

作者: 时间:2016-09-12 来源:网络 收藏

这里显示了你该如何获取一个用CTFontDescriptorRef标示可下载的字体数组:

CFDictionary *descriptorOptions = @{(id)kCTFontDownloadableAttribute : @YES};

CTFontDescriptorRef descriptor = CTFontDescriptorCreateWithAttributes((CFDictionaryRef)descriptorOptions);

CFArrayRef fontDescriptors = CTFontDescriptorCreateMatchingFontDescriptors(descriptor, NULL);

系统不会检查字体是否已存在于磁盘上而将直接返回同样的列表。另外,这个方法可能会启用网络并造成阻塞,你不应该在主线程中使用它。

使用如下基于块的 API 来下载字体:

bool CTFontDescriptorMatchFontDescriptorsWithProgressHandler(

CFArrayRef descriptors,

CFSetRef mandatoryAttributes,

CTFontDescriptorProgressHandler progressBlock)

这个方法能操作网络并传递下载进度信息来调用你的progressBlock方法直到下载成功或者失败。参考苹果的 DownloadFont 样例看如何使用它。

有一些值得注意的地方,这里的字体只在当前程序周期内有效,下次运行将被重新载入内存。因为字体存放在共享空间中,你不能依赖于它们是否可用。很有可能也不能保证的说,系统会清理这个目录,或者你的程序被拷贝到新的设备环境中,而这时又没有这个字体存在,同时当前处于没有网络的环境中。在 Mac 或是模拟器上,你能根据kCTFontURLAttribute获得字体的绝对路径,加载速度也会提升,但是在 iOS 上是不可能的,因为这个目录在你程序之外,你需要再次调用CTFontDescriptorMatchFontDescriptorsWithProgressHandler。

你也可以注册新的kCTFontManagerRegisteredFontsChangedNotification通知来跟踪新字体在何时载入到了字体注册表中。你可以在 WWDC2013 的 Session223 “Using Fonts with TextKit”中查找更多信息。

这还不够?

没关系,iOS7 的新东西远不止如此!了解一下 NSHipster 你将明白语音合成相关的东西,base64、NSURLComponents、NSProgress、bar codes、reading lists 以及 CIDetectorEyeBlink。还有很多我们没有涵盖到的,比如苹果 iOS7 的 API 变化,iOS 指南的新东西以及 Foundation Release Notes(这些都是服务于 OS X的,但是代码都是共享的,也同样适用于 iOS)。很多方法都还没形成文档,等着你来探究和 blog。


上一页 1 2 3 4 下一页

关键词:

评论


相关推荐

技术专区

关闭