您的位置:首页 > 移动开发 > IOS开发

iOS-初解绘画

2016-03-18 09:04 393 查看
绘图:需要使用Quartz 2D 

绘画常规步骤:

(1)要有一支画笔 

①设置笔画宽度 CGContextSetLineWidth:

②设置笔画颜色 set

③设置笔画的颜色 setStroke(下文有与set的区别)

④画线区域范围的填充 setFill

⑤设置画笔填充样式

typedef CF_ENUM (int32_t, CGPathDrawingMode) {

  kCGPathFill,      //只填充

  kCGPathEOFill, //

  kCGPathStroke,//画笔颜色

  kCGPathFillStroke,//既有填充又有画笔

  kCGPathEOFillStroke
};

(2)要有一个画板CGContextRef

(3)画图的内容

(4)把内容添加到上下文(画板)

(5)把内容画到画板上

常用方法介绍(这里没有按画图的步骤介绍方法)

(1)CGContextRef 上下文(画布)

(2)路径(贝塞尔路径)

①UIBezierPath

②通过点绘制一个路径  CGMutablePathRef

③注意 必须设置起始点 CGContextMoveToPoint

(3)画形状

①画矩形:CGContextAddRect:

②画曲线:CGContextAddCurveToPoint

③画圆形:CGContextAddEllipseInRect

.......

(4)截图

①开始获得图片上下文  UIGraphicsBeginImageContext

②获得当前图片上下文的图片  UIGraphicsGetImageFromCurrentImageContext() 是从画图视图layer上得到的

③关闭图片上下文  UIGraphicsEndImageContext 

④开始截图  UIGraphicsBeginImageContextWithOptions

⑤把路径绘制到上下文  CGContextStrokePath

⑥直接把路径绘制到界面stroke

1、画线

(1)首先得有一张画板 CGContextRef

(2)路径 画图的内容

(3)把路径添加到上下文CGContextAddPath

(4)把路径渲染到上下文CGContextStrokePath

//画直线
- (void)addLine{
//  1、创建画布(上下文)
//    获得当前的上下文当做画布
    CGContextRef context =UIGraphicsGetCurrentContext();
//    2、创建画图的内容
/*
使用path,则一个path就代表一条路径。
比如:如果要在上下文中绘制多个图形,这种情况下建议使用path。
*/
    UIBezierPath *path = [UIBezierPathbezierPath];
//    2、1起始点
    /*
     Point 中心点
     x:中心点x
     y:中心点y
     
     y不变,x从小值到大值:横向直线
     */
    [path moveToPoint:CGPointMake(20,20)];
//    2、2添加终点
//    CGContextAddLineToPoint(<#CGContextRef  _Nullable c#>, <#CGFloat x#>, <#CGFloat y#>)这种方法也可以用下面这个
    
    [path addLineToPoint:CGPointMake(200,200)];
    
    [path addLineToPoint:CGPointMake(100,200)];
    
    
//    2.3 设置画笔宽度
    path.lineWidth =80
    ;
//    2、4设置画笔颜色
//    set 设置既有填充又有画笔颜色
//    [[UIColor whiteColor] set];
    
//   设置画笔颜色  setStroke设置的是边框的颜色
    [[UIColorwhiteColor ]
setStroke];
//    设置填充的颜色
    [[UIColorbrownColor]
setFill];
    
//    3、把画的内容(路径)添加到画布(上下文)
    
    CGContextAddPath(context, path.CGPath);
    
//    4、渲染内容到上下文
//    CGContextStrokePath(context);
    
//    设置填充的样式既有填充又有画笔颜色
    CGContextDrawPath(context,kCGPathFillStroke);
    
}

//画矩形
- (void)addRect{
    
//    1、画布
    CGContextRef rect =UIGraphicsGetCurrentContext();
    
//    2、内容
    CGContextAddRect(rect,CGRectMake(0,0,
100,100));
    
//    设置画笔颜色
//    [[UIColor redColor]set];
    
    [[UIColorredColor]
setFill];
    [[UIColoryellowColor]
setStroke];
    
//    设置画笔宽度
    CGContextSetLineWidth(rect,10);
    
//    3、渲染
//    直接渲染矩形
//    CGContextStrokeRect(rect, CGRectMake(10, 10, 100, 100));
    
    CGContextDrawPath(rect,kCGPathFillStroke);
    
}

//画圆形
- (void)addRound{
    
//    1、画布
    contextRef =UIGraphicsGetCurrentContext();
    
//    2、内容
    CGContextAddEllipseInRect(contextRef,CGRectMake(100,100,
100,100));
    
    [[UIColoryellowColor]
set];
    
//    3、渲染
    CGContextDrawPath(contextRef,kCGPathFillStroke);
    
}

//画曲线
- (void)addCurve{
//    1、画布
    CGContextRef curve =UIGraphicsGetCurrentContext();
    
//    2、内容
    UIBezierPath *path = [UIBezierPathbezierPath];
    
//    起始点
//    [path moveToPoint:CGPointMake(100, 100)];
    
//    画曲线(直接绘制成曲线)
//    [path addCurveToPoint:CGPointMake(100, 200) controlPoint1:CGPointMake(20, 20) controlPoint2:CGPointMake(300, 300)];
    
    [[UIColorredColor]setStroke];
    [[UIColoryellowColor]setFill];
    
//    画弧
    /*
     center:中心点不用起始点
     radius:半径
     startAngle:开始弧度
     endAngle:结束弧度
     clockwise:是顺时针还是逆时针
     */
    [path addArcWithCenter:CGPointMake(100,100)
radius:100startAngle:M_PIendAngle:1/4clockwise:YES];
    
//    把内容添加到画布上
    CGContextAddPath(curve, path.CGPath);
    
//    渲染
    CGContextDrawPath(curve,kCGPathFillStroke);
    
}

//画线简化
- (void)addLineEasy{
//    1、路径
//    2、画出内容
    
//    1
    UIBezierPath *path = [UIBezierPathbezierPath];
    [path moveToPoint:CGPointMake(200,200)];
    [path addLineToPoint:CGPointMake(300,40)];
    [[UIColorwhiteColor]set];
    
//    2
    [path stroke];
    
}

//截屏
- (void)cutScreen{
//    1、获得一个图片的上下文(画布)
//    2、画布的上下文
//    3、设置截图的参数
//    4、截图
//    4、关闭图片的上下文
//    5、保存
    
//    1、
    UIGraphicsBeginImageContext(self.frame.size);
//    2、
    [selfaddRound];
    
    [self.layerrenderInContext:contextRef];
    
//    3、
    /*
     size:图片尺寸
     opaque:是否是不透明  yes是不透明
     scale:比例
     */
    UIGraphicsBeginImageContextWithOptions(self.frame.size,YES,
1);
    
//    4、
    UIImage *image =UIGraphicsGetImageFromCurrentImageContext();
    
//    5
    UIGraphicsEndImageContext();
    
//    6
    UIImageWriteToSavedPhotosAlbum(image,self,
@selector(image:didFinishSavingWithError:contextInfo:),nil);
    
}

- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void
*)contextInfo{
    
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  iOS 绘画 画板