2011-05-09 84 views
6

我正在尝试为iPad绘制一幅简单的绘图应用程序,您可以在图片上绘制,而我使用CGContext的东西来做,但我最初计划处理擦除的方式是只是画白色的东西...除了我今天才意识到,当你在绘制另一张图像时它不起作用,因为当你“擦除”时,你也会“擦除”背景图像。使用CGContext绘图后擦除

有什么方法可以支持实际的擦除?

谢谢!

回答

4

在图像上方的图层中显示用户的图形。然后擦除就像在绘图层上绘制透明色块一样简单,以便让其下方的图像像素显示出来。

+0

你如何绘制一个透明的补丁?我使用了'CGContextSetRGBStrokeColor',其alpha值为0.0,但似乎不起作用。 – Roberto 2011-06-10 00:03:57

+0

玩合成模式(例如复制而不是SourceIn),并考虑填充以及抚摸。 – 2011-06-10 01:04:31

+2

查看源代码https://github.com/yusenhan/Smooth-Line-查看 – 2012-12-10 13:49:30

19

我还需要擦除功能。基于@杰里米的回答,这里是我的工作:

CGContextRef cgref = UIGraphicsGetCurrentContext(); 

if(erase == TRUE) // Erase to show background 
{ 
    CGContextSetBlendMode(cgref, kCGBlendModeClear); 
} 
else // Draw with color 
{ 
    CGContextSetBlendMode(cgref, kCGBlendModeNormal); 
} 
+0

你是我的英雄,非常感谢你给予这样一个简单的解决方案! – Bek 2012-11-22 11:08:40

+1

首先我要通过Ray Wenderlich的教程来创建一个简单的绘图应用程序。一切都适用于它,但是当我将混合模式更改为kCGBlendModeClear时,它所做的一切就是擦掉整个画布,一旦触摸结束被调用。有什么想法吗? – 2014-05-01 22:14:15

+0

非常好,但过于冗长。你可以用同样的方法做同样的事情:'CGContextSetBlendMode(UIGraphicsGetCurrentContext(),erase?kCGBlendModeClear:kCGBlendModeNormal);' – SaltyNuts 2014-10-30 17:16:17