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{
}
绘画常规步骤:
(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{
}
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- 讲解iOS开发中基本的定位功能实现
- iOS中定位当前位置坐标及转换为火星坐标的方法
- js判断客户端是iOS还是Android等移动终端的方法
- iOS应用中UISearchDisplayController搜索效果的用法
- IOS开发环境windows化攻略
- iOS应用中UITableView左滑自定义选项及批量删除的实现
- 浅析iOS应用开发中线程间的通信与线程安全问题
- 检测iOS设备是否越狱的方法
- .net平台推送ios消息的实现方法
- 探讨Android与iOS,我们将何去何从?
- Android、iOS和Windows Phone中的推送技术详解
- iOS推送的那些事
- IOS 改变键盘颜色代码