绘制的 NSS字符串在第二次 drawRect 调用后变得模糊

Drawed NSSstrings get fuzzy after the second drawRect call

提问人:Steaphann 提问时间:6/7/2021 最后编辑:Steaphann 更新时间:6/8/2021 访问量:58

问:

我有以下功能draw(_ rect: CGRect)

 override public func draw(_ rect: CGRect) {
        super.draw(rect)
     
        for (i, time) in times.enumerated() {
            let fontSize = style.font.pointSize
            let timeRect = CGRect(x: 2, y: y,
                                  width: style.leftInset, height: fontSize)
            let timeString = NSString(string: time)
            timeString.draw(in: timeRect, withAttributes: attributes)
            
        }
    }

在某些情况下,我想从 UIView 中删除所有以前绘制的 NSString 对象,然后再次重绘。但似乎没有 API 可以做到这一点?

谁能帮忙?

更新

调用 setNeedsDisplay 时,UIView 会删除它之前的所有绘图。但是由于某种原因,在我第二次调用 drawRect 方法后,我的字符串变得模糊。

以前 After the first drawRect

After the second drawRect

iOS Swift iPhone UIView

评论

1赞 Larme 6/7/2021
stackoverflow.com/questions/25360303/......?但同时是否清洁?否则可能就足够了。timessetNeedsDisplay
0赞 Steaphann 6/7/2021
Times 是一个字符串数组,我检查这个数组是否被更改,然后我才再次调用 drawRect。drawRect 完成后绘制的字符串是模糊的,所以我想以前的字符串仍然存在。
0赞 El Tomato 6/7/2021
一个叫“属性”的家伙从何而来?
0赞 Steaphann 6/7/2021
@ElTomato它在上面的类中定义。
0赞 outis 9/10/2021
这回答了你的问题吗?“在 Retina 显示屏上的 CGContextRef 上绘画”, “CALayers drawInContext 中的 iOS 绘图在视网膜上像素化或模糊”, “从代码 (PaintCode) 绘制的视图是像素化的,缩放时非常像素化"

答:

1赞 outis 6/8/2021 #1

与 Objective-C 一样,无需显式删除绘制的元素。相反,调用 setNeedsDisplay(_:) 以使要重绘的区域失效,并且将调用 UIView 的方法来重绘字符串。UIView 文档的“视图绘制周期”部分对此进行了说明。draw(_:)

评论

0赞 Steaphann 6/8/2021
好的,所以字符串不会被绘制两次,我在问题中添加了一些屏幕截图,以更清楚地了解正在发生的事情。你知道是什么原因造成的吗?
1赞 outis 6/23/2021
@Steaphann:这是一个不同的问题,应该这样发布(在搜索现有问题之后),即使这是您最初试图询问的问题(这表明在问题中包含整个问题的价值,而不仅仅是具体尝试的解决方案)。