iOS:可自由选择各种颜色,宽度,带橡皮擦,可撤回操作的画板涂鸦工具

最近由于项目需求需要用到一个画板功能,除了能实现实时涂鸦之外,还要实现动态改变线条颜色,线条宽度,还要实现橡皮擦,撤回上一步操作,清理画板,保存画板到相册等功能...


image

这里是提供几种常用颜色供选择,此外还提供了颜色选择器,可自由选择线条颜色


image

画线部分代码
UIGraphicsBeginImageContextWithOptions(self.frame.size, NO, 0.0);

CGContextRef context = UIGraphicsGetCurrentContext();

[self.image drawAtPoint:CGPointZero];

CGContextSetLineWidth(context, self.lineWidth);

CGContextSetStrokeColorWithColor(context, self.lineColor.CGColor);

CGContextSetLineCap(context, kCGLineCapRound);

if(_isEraserBlock()){

    CGContextSetBlendMode(context, kCGBlendModeClear);

}

CGContextMoveToPoint(context, previousPoint.x, previousPoint.y);

CGContextAddQuadCurveToPoint(context, previousPoint.x, previousPoint.y, currentPoint.x, currentPoint.y);

CGContextStrokePath(context);

self.image = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

画板是基于UIImageView的,所以保存相册时直接将image保存就行

清理就是将image置为nil,并将保存的point全部移除

self.image = nil;

[self.pointArray removeAllObjects];

撤销则是将上次操作的所有point移除,并重新绘制,此处的showLines就是将所有点重新绘制一遍

if (!self.pointArray.count) return;

[self.pointArray removeObject:self.pointArray.lastObject];

self.image = nil;

[self showLines];

橡皮擦则是设置下当前绘制的BlendMode

   if(model.isEraser){
        
        CGContextSetBlendMode(context, kCGBlendModeClear);
    }

具体操作逻辑细节和UI等是参考微信的图片编辑中的画板

github代码地址

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AI阅读 16,026评论 3 119
  • 1.做活动的日子 基本没有记,没有想法。累和没有时间 2好习惯培养 专注力有时会分心 时间记录完成80% 3健康 ...
    快乐番茄阅读 120评论 0 0
  • 记得猫哥夸过一个人,说她不仅有学习,还将学到的东西都运用到实践当中去。说实话,每日里的晨读材料都是干货满满,要是能...
    捡到蜜罐的熊阅读 596评论 4 2
  • 昨晚多玩了会儿游戏,早晨差点睡过头。 上午去了马銮湾新城建设指挥部,做了个介绍。顺带坚定了我对马銮湾片区房价长期看...
    榆树阅读 172评论 0 0
  • 前言 想到写这个是有原因的,因为之前写项目时,产品总喜欢显/隐各种位置的TextView,作为程序猿的我,有时候也...
    Kotyo阅读 1,904评论 4 3