寻求SwiftUI中无需重绘旧数据的持久化递归渲染方案
递归渲染(Recursive Rendering)需求与方案梳理
核心需求
在部分开发场景中,开发者需要一个支持写入的持久化Image或View,核心目标是避免视图更新时重绘全部旧数据——理想状态下仅需渲染新增的路径内容,无需冗余重绘所有未变更的历史路径。我将这种能力定义为Recursive Rendering(递归渲染),即能够通过编程修改显示图像,无需重复绘制已存在的旧数据。
已尝试的方案及问题
初始方案:
首次提出该需求后,@rob mayoff提供了一套循环实现方案:- 在Canvas中完成内容绘制
- 将Canvas转换为Image进行显示
- 下一次绘制前,先将已生成的Image重新绘制回Canvas
该方案满足了递归渲染的核心需求,但存在线条模糊和内存泄漏的问题。
优化后的方案与官方反馈:
针对上述问题优化方案后,我再次提出相关疑问。苹果开发者技术支持工程师指出,Canvas与Image之间的反复转换正是引发线条模糊和内存泄漏的原因,同时提供了修复该问题的简洁代码,但这套代码不支持递归渲染——每次数据更新时仍需重绘所有旧路径,包括未受更新影响的部分。
当前诉求
目前仍在寻找合适的解决方案:获取一个可持续写入新数据、无需重绘仍需保留显示的旧数据的持久化SwiftUI View/Image/Canvas。
内容的提问来源于stack exchange,提问作者KeithB
相关产品推荐
相关产品推荐

