背景透明的NSTextView出现重影残留文本,如何清除背景旧文本?
NSTextView透明背景文本重影问题解决方案
问题成因
当你将承载NSTextView的Window背景设为.clear,同时禁用NSTextView本身的背景绘制后,视图刷新时没有上层纯色背景覆盖上一帧的绘制内容,旧文本的像素会直接残留在视图层级上,就会出现重影问题。
解决步骤
- 将NSTextView的
drawsBackground属性恢复为true,同时将其backgroundColor属性设置为.clear,不要完全禁用背景绘制能力 - 每次修改
NSTextView.string属性前,先调用NSTextView所在父Window的setNeedsDisplay(.infinite)方法,触发全窗口区域的重绘,直接清除所有残留的旧像素 - 如果对性能有要求,可以提前计算旧文本的占位边界,调用
setNeedsDisplay(_ rect: NSRect)仅重绘旧文本覆盖的区域,减少不必要的绘制开销
示例代码
// 更新文本前先触发重绘 textView.window?.setNeedsDisplay(.infinite) // 再赋值新的文本内容 textView.string = newSubtitleText
内容的提问来源于stack exchange,提问作者ivyliner
相关产品推荐
相关产品推荐

