CodeV

8.2-iOS 7的改变

示例8-1中使用的drawAtPoint:withAttributes:方法是iOS 7的新功能。大多数较旧的字符串绘图方法(如drawAtPoint:withFont:)已被弃用(参见图8-2)。 布局管理者和动态文本等新技术在这个领域带来了革命。但是,您将看到,并不是所有的这些方法都可以直接进行上下文绘制。

图8-2

图8-2 iOS 7引入了许多对字符串绘制的更改。

动态文本

动态文本是一种自动适应字体系列的成员以填充用户界面角色的技术。 例如,“标题”字体在屏幕上引入材料部分。对于一个视力有限的用户来说,那个字体可能比另一个具有20/20视力的用户的“标题”字体大得多。 当用户调整其大小偏好时,字体角色可以调整 - 改变大小和总体字重,以保持文本可读性超出简单的缩放比例。

这些新功能特性与UIKit绘图不兼容。 绘图创建静态图像。 用于绘制的每个上下文的尺寸影响相对于设备的整体尺寸呈现字体的方式。 当绘图上下文不是与屏幕完美匹配的像素时,字体可能会因其“理想的”用户驱动尺寸而被拉伸,压扁或以其他方式扭曲。

另外,绘制的元素不能自动更新为动态文本通知。每当用户调整文本设置时都会生成这些通知。如果元素需要适应动态文本,避免绘制它们。改用labels和text views。

当您为PDF,应用程序或其他图像输出生成材料时,请避免使用动态文本。 使用具体特征和大小的特定字体进行绘图。这就是为什么本章在其例子中应用了精确的显示和尺寸大小。

Text Kit

Text Kit是iOS 7中的另一个令人兴奋的部分。它使您可以将Core Text样式排版应用于文本视图。Core Text是Apple的基于C的技术,使您能够从代码创建灵活而强大的排版解决方案。Text Kit,构建在Core Text之上,将该功能扩展到UIKit视图。

您也可以使用Text Kit绘制UIKit上下文。 如图8-3所示,当您尝试执行任何具有挑战性的任务时,例如绘制内部形状或在预期的UITextView目标之外使用基于列的绘图,结果可能会有问题。Text Kit仍然非常新,非常年轻,有些buggy。

图8-3

图8-3Text Kit正在经历一些成长中的痛苦,正如您看到的,在此屏幕截图中显示的错误。如果您仔细查看descenders,到环绕视图的顶部,应留在中心圈的文字已经向左移动。

本章讨论了Core Text解决方案,而不是用于绘图的Text Kit解决方案。 尽管它是基于C的API,Core Text仍然是复杂文本布局的更强大可靠的解决方案。


本文翻译自《iOS Drawing Practical UIKit Solutions》作者:Erica Sadun,翻译:Cheng Dong。如果觉得本书不错请购买支持正版:亚马逊购买传送门,本书所有源代码可在GitHub上下载。译者虽然力求做到信,达,雅,但是由于时间仓促加之译者水平十分有限,文中难免会出现不正确,不准确,词不达意,难于理解的地方,还望各位批评指正,共同进步,谢谢。转载请注明出处。