本文通过 3 个例子,继续讲述 Core Text 实践上的思路
前文已经实现了控制每个字的位置,
Core Text 实践:自定义每个字的位置
一个格子,一个字
一个字,一个富文本,一个 CTLine,
先画背景图,再画文字,即可
例子一,在前文的基础上,实现自动换行
将原本的两行 “椿\n赤い椿”,
转换为一行 “椿 赤い椿”,
剩下的,就容易了
把每个字,转化为格子,
遇到空格,就跳过
模型处理
模型长这样,
struct Coupling: Decodable {
var string: String
let type: Int
}
数据是这样一个 list, [Coupling]
现在要做合并,
能够放在一行,就放在一行,
不能够放在一行,就换行
数据样式: 标题 , 很多格子,标题,其他(略)
// 这个是 result
var info = [Coupling]()
// 放置当前的文本
var current: Coupling?
for jujube in list{
switch jujube.type{
case 4:
// 格子
// 拿到当前的格子,看情况
if var c = current{
// 拼接当前和下一个,看看效果
let reduceTmp = c.string + " " + jujube.string
// 超过一行
if reduceTmp.fourW >= TextContentConst.widthInUse{
// 就添加当前
info.append(c)
// 更新当前文本
current = jujube