1.获取当前的画板
CGContextRef context = UIGraphicsGetCurrentContext();
2.设置画笔的颜色
CGContextSetStrokeColorWithColor(context, [UIColor redColor].CGColor);
CGContextSetRGBStrokeColor(context, 1, 0, 0, 1);
//设置画笔的宽度
CGContextSetLineWidth(context, 20);
//设置画笔的样式
CGContextSetLineCap(context, kCGLineCapRound);
//把画笔移动到某一个点
CGContextMoveToPoint(context,firstPoint.x, firstPoint.y);
//跟另外一个点之间形成一条线
CGContextAddLineToPoint(context, nextPoint.x, nextPoint.y);
//把画板上刚才描的路径画出来
CGContextStrokePath(context);
//画圆 Ellipse椭圆
//CGContextStrokeEllipseInRect(context, CGRectMake(100, 200, 200, 200));
//画矩形
//CGContextStrokeRect(context, CGRectMake(20, 220, 250, 250));
因为drawRect是系统的方法 系统不允许我们自己去调用这个方法所以只能调用
[self setNeedsDisplay];
- (void)drawRect:(CGRect)rect
//这个方法提供给我们在一个视图显示之前 自己去绘制一些东西
//不需要自己创建画板
简单画板编辑
1.在storyBoard中拖拽所需的控件 (一个imageVIew用来展示画板的背景颜色 一个View设置成透明让其充当画板(其大小和imageVIew的大小一样) 四个lab分别是R G B Width 四个UIslider 一个View 显示调试好的颜色 若干button (撤销 清空 橡皮上(画笔)背景图片 画笔样式 保存))
2.给UIslider绑定方法通过slider的value的变化改变颜色 并且让View的背景颜色显示为调试后的颜色
3.画笔大小UISlider方法中 让当前的宽度为slider的value值
4.button点击方法中点击不同的button实现撤销 (就是把线数组 颜色数组 画笔宽度数组 橡皮差数组 字体样式数组 分别移除其数组中的最后一个值)并且调用[drawView setNeedsDisplay];方法
5.清空就是把上面的咯咯数组删除
橡皮差 点击让橡皮差得状态改变 并改变橡皮差得标题
6.点击可改变背景图片
7.改变画笔状态
8.保存
// 1,把背景图片和画的画合成一张图片
// 缺点:橡皮擦会把背景图片擦掉
UIGraphicsBeginImageContext(CGSizeMake(280, 280));
// [bgImageView drawRect:CGRectMake(0, 0, 280, 280)];
// [drawView drawRect:CGRectMake(0, 0, 280, 280)];
CGContextRef context = UIGraphicsGetCurrentContext();
[bgImageView.layer renderInContext:context];
[drawView.layer renderInContext:context];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
// 把图片写入系统相册
UIImageWriteToSavedPhotosAlbum(image, self, @selector(image:didFinishSavingWithError:contextInfo:),nil);
画板View中把相应的数组设置为你属性 设置当前的颜色的属性 设置当前画笔大小的属性 设置判断是不是橡皮差的属性
9.在init方法中初始化各个数组并设置初始的当前的画笔的大小和颜色
10.在awakeFromNib中初始化各个数组并设置初始的当前的画笔的大小和颜色
11在drawRect方法中
12.获取当前的画板
13.设置线条的样式
14.遍历大数组取出里面的小数组并且获取当前小数组的索引 根据此索引获取当前画笔的颜色 并把颜色设置给画笔 获取当前是否是橡皮差 如果是设置为橡皮差模式
// 橡皮擦模式
CGContextSetBlendMode(context, kCGBlendModeClear);
如果不是设置为普通模式
// 普通模式
CGContextSetBlendMode(context, kCGBlendModeNormal);
取出画笔对应的宽度 设置线条的宽度
把画笔移到某个点 在小数组里面取出第一个元素 并设置为画笔的开始点
遍历小数组中剩下的元素 设置到下一个点的形成的一条线的点
15.把路径画出来
16.在touchesBegan方法中初始化小数组并把开始点放到数组中 把小数组放到大数组中 把当前的颜色放到颜色数组中 把当前的画笔大小放到画笔数组中 把是否是橡皮差放到橡皮差数组中
17.在move方法中把点放到小数组中
调用[self setNeedsDisplay];