gpt4 book ai didi

ios - 使用 setNeedsDisplayInRect 仍然会删除底层内容

转载 作者:行者123 更新时间:2023-11-29 13:37:43 26 4
gpt4 key购买 nike

我将 UIView 子类化并重写了 touchesBegan、touchesMoved、touchesEnded 和 drawRect 方法,以创建允许用户通过触摸屏幕进行绘图的应用程序。我正在使用 Quartz 2D 库来绘图。

在 touchesBegan、touchesMoved 和 touchesEnded 中,我跟踪触摸事件的当前和先前位置。每次触摸移动和触摸结束时,我都会使用包含触摸的先前和当前位置的最小矩形调用 setNeedsDisplayInRect 以保留底层绘图。 (我希望所有绘图都像图层一样相互叠加。)

我注意到一个奇怪的现象:当创建一个与另一个绘图重叠的绘图时,Quartz 会重新绘制传递给 setNeedsDisplayInRect 的矩形,但会删除该矩形下方的所有内容。

我怀疑问题是由于混合模式引起的,但是我尝试了多种不同的混合模式,但似乎没有一个能解决问题。

如何绘制保留底层内容的路径?

最佳答案

Quartz 不是 Canvas 模型。它不会跟踪先前循环中绘制的内容。每次调用 drawRect: 时,您有责任处理传递给您的矩形中的每个像素。默认情况下(在 UIView clearsContextBeforeDrawing 中设置),Quartz 会为您清除矩形,但每次绘制内容都是您的工作。

如果你想分层,你要么需要将每个东西放在它自己的 CALayerUIView 中,要么你需要每次重绘任何重叠部分 drawRect: 被调用。

关于ios - 使用 setNeedsDisplayInRect 仍然会删除底层内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10065919/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com