绘制新图像后UITextView文字模糊,frame取整方案失效
图像绘制流程下UITextView文字模糊问题处理
问题现象
- 执行自定义绘制新图像的操作时,关联页面内的UITextView会出现文字模糊异常
- 绘制完成后,界面展示的第一行文字呈现模糊效果,相邻的第二行文字保持正常清晰状态
- 此前验证过视图frame整数取整的通用方案,在未触发图像绘制流程时该方案可正常解决同类模糊问题,但一旦执行绘制新图像的操作,方案就会失效
- 项目内UIView转UIImage的核心实现代码如下:
// UIView -> UIImage convenience init(view: UIView) { UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.isOpaque, 0) view.drawHierarchy(in: view.bounds, afterScreenUpdates: true) let image = UIGraphicsGetImageFromCurrentImageContext()! UIGraphicsEndImageContext() self.init(cgImage: image.cgImage!) }
对应解决方法
- 修正UIImage初始化的scale匹配逻辑。原代码直接通过cgImage初始化UIImage时,会默认使用1倍缩放比例,和当前设备屏幕的实际缩放值不匹配,后续将图像添加到界面后容易触发亚像素偏移引发文字模糊。需要在初始化时明确传入当前主屏幕的scale值,替代默认的无scale初始化方式。
- 绘制完成后强制校正UITextView的像素对齐。在图像绘制流程结束后,对UITextView的layer属性做像素取整校正:将layer的position、bounds坐标按当前屏幕scale值放大取整后,再还原为逻辑坐标,抵消绘制操作对视图像素对齐基线的干扰。
- 校正图形上下文的渲染参数。创建图像上下文时,不要直接沿用传入视图的opaque参数,需根据实际绘制内容适配透明度与抗锯齿设置,避免上下文渲染采样和UITextView原生文字渲染的采样逻辑出现偏差。
- 绘制流程完成后主动触发UITextView的布局刷新。手动调用UITextView的
layoutIfNeeded方法,确认textView的frame没有因为新插入的图像视图发生非预期的偏移。
内容的提问来源于stack exchange,提问作者Lucy Jeong
相关产品推荐
相关产品推荐

