ios 绘图 橡皮 的实现办法 自由批注橡皮的实现办法 缓存位图橡皮的实现办法 bitmap Quartz 2D 缓存位图

来源:互联网 发布:淘宝直通车溢价 编辑:程序博客网 时间:2024/04/26 05:22

首先说明一下我想实现的橡皮的项目背景:有一个展示ppt的view,覆盖到它上面一个背景色为clearColor的subview,这个subview重写了绘图方法,用户可以在上面进行绘图,显然,橡皮的功能就是能把当前的背景色为clearColor上的不透明的线条用类似画笔的方式进行擦除,可以调整橡皮的粗细。


思路一:我去,这还不简单,画图板都是这么实现的,直接把画笔的颜色设为clearColor,然后直接在subview上面绘图不就行了么,绘图即擦除,简直太简单了,而且不可能有问题

结果:我日他奶奶的,用clearColor的画笔在clearColor为背景的view上绘图,你猜是什么颜色,肯定还是clearColor呗,错。。。。。。。⋯⋯⋯⋯⋯⋯⋯⋯是黑色,结果一出来我就崩溃了,我去 这也行,XCODE你也太坑了吧

思路二:好吧,你赢了,那我用背景色涂行么。。。

结果:。。。。当然还是黑色

思路三:在请教了多方专家以后得到完美实现,核心方法

CGContextClearRect(bitmapContext, <#CGRect rect#>)橡皮方法实现的核心方法

在drawLineFrom:(CGPoint)aStart andTo:(CGPoint)aEnd方法的最后一步,就是把线条加入context的时候进行判断,如果橡皮位(flag:从控制器得到,本身也是代理的成员)为NO就还是普通的绘制过程,如果为yes直接擦除当前操作的rect,这样完美实现了橡皮。当然flag你的从视图控制器一层一层传过来,view里也设一个flag变量会稍微简单点,祝大家早日实现

if(flag ==NO)

{

 CGContextFillEllipseInRect(bitmapContext, rect );

//CGContextFillRect(bitmapContext, rect);

}

else

{

CGContextClearRect(bitmapContext, rect);

}


关于自由批注的其他代码 参考我其他的帖子 需要源码请留言

代码地址

http://dl.dbank.com/c0gys4jhay


原创粉丝点击