首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用setNeedsDisplayInRect仍然会擦除底层内容

使用setNeedsDisplayInRect仍然会擦除底层内容
EN

Stack Overflow用户
提问于 2012-04-09 03:48:02
回答 1查看 577关注 0票数 1

我继承了一个UIView,并覆盖了touchesBegan、touchesMoved、touchesEnded和drawRect方法,创建了一个允许用户通过触摸屏幕进行绘图的应用程序。我正在使用Quartz 2D库来绘制这些图形。

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

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

我怀疑这个问题是由于混合模式造成的,但是我尝试了许多不同的混合模式,但似乎没有一个能起到作用。

如何绘制保留基础内容的路径?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-09 04:12:46

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10065919

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档