我继承了一个UIView,并覆盖了touchesBegan、touchesMoved、touchesEnded和drawRect方法,创建了一个允许用户通过触摸屏幕进行绘图的应用程序。我正在使用Quartz 2D库来绘制这些图形。
在touchesBegan、touchesMoved和touchesEnded中,我跟踪触摸事件的当前和以前位置。每次触摸移动和触摸结束时,我使用包含触摸的前一个和当前位置的最小矩形调用setNeedsDisplayInRect,以便保留底层绘图。(我希望所有的绘图都像图层一样彼此相加。)
我注意到一个奇怪的现象:当创建一个与另一个绘图重叠的绘图时,Quartz会重新绘制传递给setNeedsDisplayInRect的矩形,但会删除该矩形下的所有内容。
我怀疑这个问题是由于混合模式造成的,但是我尝试了许多不同的混合模式,但似乎没有一个能起到作用。
如何绘制保留基础内容的路径?
发布于 2012-04-09 04:12:46
Quartz不是一个画布模型。它不会跟踪在以前的循环中绘制的内容。每次调用drawRect:时,您都要负责处理传递给您的矩形中的每个像素。默认情况下(在UIView clearsContextBeforeDrawing中设置),Quartz将为您清除矩形,但每次绘制内容都是您的工作。
如果你想分层,你要么需要把每个东西放在它自己的CALayer或UIView中,要么你需要在每次调用drawRect:时重新绘制任何重叠。
https://stackoverflow.com/questions/10065919
复制相似问题