Core Text 实践 +:文字随心所欲摆放

实现下面的效果

Simulator Screen Shot - iPhone 12 mini - 2021-04-01 at 11.50.51.png

可以使用很多控件,

左边红框内,一个 UILabel;

右边红框内,一个 UILabel

很多个 UILabel 码起来


使用 CoreText 可以用一个控件,实现绘制

思路:

先把原文,转化为下面的

截屏2021-04-01 下午2.39.51.png

再把第二张,转化为最初的效果


先要弄出一个类似结构的富文本

保证每一行的 Y 坐标,可控

( 保证非右边红框的内容,与最终一致)

( 保证右边红框的内容,其行数和 y 坐标,与最终一致)

  • 富文本,转化为 CTFrame 一, 出现第二张图,( 把右边红框内的文本,处理掉 )

关键是,把右边红框内的富文本,合理拆分出来

CTFrame 一,宽度 = 右边红框内的富文本的宽度 + 50

  • 右边红框富文本,转化为 CTFrame 二 , 糊到上一步空出的地方

右边红框内的文字,自然不能用 CTFrame 一

一个右边的红框,就是一个 CTFrame 二

给一个字符串,怎么知道它有多少行

字符串,转化为富文本,

富文本,转化为 CTLine,

拿到 CTLine 的宽度 lineWidth,

知道文本框的宽度 containerWidth,

行数 = Int(ceil(lineWidth / containerWidth))

实现:

例子数据

[
      {
        "string" : "世界が終るまでは",
        "type" : 6
      },
      {
        "string" : "世界が終わる前に 聞かせておくれよ",
        "title" : "歌詞:",
        "type" : 7
      },
      {
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值