Quantcast
Channel: InfoQ - 促进软件开发领域知识与创新的传播
Viewing all articles
Browse latest Browse all 1638

深入理解iOS图文混排原理并自定义图文控件

$
0
0

iOS开发中一般用UILabel来展示文字、UIImageView用来显示图片、UIButton用于简单的图文点击响应事件,稍复杂一点的可以借助NSAttributedString来实现图文混排需求,又或者将图文内容转换为HTML由WKWebView(UIWebView)来展示。然而以上方案都有各自的局限性:UILabel绘制NSAttributedString不能灵活定位文本内的点击锚点区域,转换为HTML展示则带来Native与Web端交互成本以及WKWebView自身的性能问题。

那么,是否能有一种控件,在满足富文本图文混排的同时还能响应自定义锚点点击事件?要实现以上需求,我们首先从iOS图文展示原理说起。

图文绘制架构

iOS7之后的图文绘制架构如下图所示,越往上封装程度越高,但可定制程度也越低,本文涉及讲解的主要是CoreText以及CoreGraphics层级 。

CoreGraphics

从下往上说,首先是CoreGraphics。这是一个C语言接口的核心图形库,而且它是跨平台的类库,iOS和macOS系统均可使用。虽然它很偏底层,但很多情况下其实你已经使用过它了:比如CGAffineTransform用于形变,CGBitmapContext用于截图或者图片绘制,CGContext用于获取上下文进行直线、曲线、不规则图形绘制等。


Viewing all articles
Browse latest Browse all 1638

Trending Articles