CoreText:实现图文混排、点击图片功能(Swift)

本文介绍了如何使用Swift通过CoreText实现图文混排,详细讲解了从插入图片占位符到计算图片绘制frame的过程。并讨论了图片点击事件的处理,包括获取CTFrame中的CTLine和CTRun,计算图片位置,以及实现touchesBegan响应来判断点击事件是否发生在图片上。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这些天学习了一下图文混排,相关基础知识点,前面绘制纯文本文章已经介绍,今天主要看一下图文混排的实现。

CoreText图文混排实现的过程

CoreText实现图文混排其实就是在富文本中插入一个空白的富文本字符串作为图片占位符,通过代理设置相关的图片尺寸信息,根据从富文本得到的frame计算图片绘制的frame然后再绘制图片的过程


具体分析

Core Text 本身并不支持图片绘制,图片的绘制你还得通过 Core Graphics 来进行只是 Core Text 可以通过 CTRun 的设置为你的图片在文本绘制的过程中留出适当的空间。这个设置就使用到 CTRunDelegate 了, CTRunDelegate 作为 CTRun 相关属性或操作扩展的一个入口,使得我们可以对 CTRun 做一些自定义的行为。为图片留位置的方法就是加入一个空白的 CTRun ,自定义其 ascent descent width 等参数,使得绘制文本的时候留下空白位置给相应的图片。然后图片在相应的空白位置上使用 Core Graphics 接口进行绘制。

使用 CTRunDelegateCreate 可以创建一个 CTRunDelegate ,它接收两个参数,一个是 callbacks 结构体,一个是所有 callback 调用的时候需要传入的对象。 callbacks 的结构体为 CTRunDelegateCallbacks ,主要是包含一些回调函数,比如有返回当前 run ascent descent width 这些值的回调函数,至于函数中如何鉴别当前是哪个 run ,可以在 CTRunDelegateCreate 的第二个参数来达到目的,因为 CTRunDelegateCreate 的第二个参数会作为每一个回调调用时的入参。

CoreText
UIWebView在排版方面的优劣比较
电动汽车数据集:2025年3K+记录 真实电动汽车数据:特斯拉、宝马、日产车型,含2025年电池规格和销售数据 关于数据集 电动汽车数据集 这个合成数据集包含许多品牌和年份的电动汽车和插电式车型的记录,捕捉技术规格、性能、定价、制造来源、销售和安全相关属性。每一行代表由vehicle_ID标识的唯一车辆列表。 关键特性 覆盖范围:全球制造商和车型组合,包括纯电动汽车和插电式混合动力汽车。 范围:电池化学成分、容量、续航程、充电标准和速度、价格、产地、自主水平、排放、安全等级、销售和保修。 时间跨度:模型跨度多年(包括传统和即将推出的)。 数据质量说明: 某些行可能缺少某些字段(空白)。 几个分类字段包含不同的、特定于供应商的值(例如,Charging_Type、Battery_Type)。 各列中的单位混合在一起;注意kWh、km、hr、USD、g/km和额定值。 列 列类型描述示例 Vehicle_ID整数每个车辆记录的唯一标识符。1 制造商分类汽车品牌或OEM。特斯拉 型号类别特定型号名称/变体。型号Y 与记录关联的年份整数模型。2024 电池_类型分类使用的电池化学/技术。磷酸铁锂 Battery_Capacity_kWh浮充电池标称容量,单位为千瓦时。75.0 Range_km整数表示充满电后的行驶程(公)。505 充电类型主要充电接口或功能。CCS、NACS、CHAdeMO、DCFC、V2G、V2H、V2L Charge_Time_hr浮动充电的大致时间(小时),上下文因充电方法而异。7.5 价格_USD浮动参考车辆价格(美元).85000.00 颜色类别主要外观颜色或饰面。午夜黑 制造国_制造类别车辆制造/组装的国家。美国 Autonomous_Level浮点自动化能力级别(例如0-5),可能包括子级别的小
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值