说直白点就是能够完成绘制的二维的引擎。!,以前接触的不多很多都是在网上搬的,最近自己写了个demo!发现好像懂了点上面!
上代码吧。。!
-
(void)drawRect:(CGRect)rect {
//----------第一次尝试-----------
//现在我们已经完成了Core Graphics绘图的三分之一——创建一个画布。
// 接下来需要考虑被画上去的东西。这在UIKit中往往是一个UI控件,如Button、Label等。而在Core Graphics中通常表现为一些基本图形:三角形、矩形、圆形、以及这些图形的边框等。
/* 创建path路径画图//创建上下文,其实不知道为什么要创建上下文!绘制好三角形 但是不知道怎么弄上去的!
CGContextRef ctx = UIGraphicsGetCurrentContext();
//创建路径
CGMutablePathRef path = CGPathCreateMutable();
//移动到指定位置
CGPathMoveToPoint(path, nil, 10, 300);
//绘制直线
CGPathAddLineToPoint(path, nil, 30, 20);
//添加到上下文
CGContextAddPath(ctx, path);
//这是绘制三角形吗?
CGContextAddArc(ctx, 200, 200, 1, 1, 1, 1);
//渲染 才回显示出来。。!
CGContextFillPath(ctx);//又创建一条
CGMutablePathRef path1 = CGPathCreateMutable();CGPathMoveToPoint(path1, nil, 30, 60);
CGPathAddLineToPoint(path1, nil, 30, 100);
CGContextAddPath(ctx, path1);
*///设置笔触颜色
// CGContextSetRGBStrokeColor(ctx, 1.0, 0, 0, 1);
// //设置填充色
// CGContextSetRGBFillColor(ctx, 0, 1.0, 0, 1);
// //设置快读
// CGContextSetLineWidth(ctx, 2.0);
// CGContextSetLineCap(ctx, kCGLineCapRound);//设置顶点样式
// CGContextSetLineJoin(ctx, kCGLineJoinRound);//设置连接点
// CGFloat lengths[2] = {18,9};
// CGContextSetLineDash(ctx, 0, lengths, 2);
// CGContextSetShadowWithColor(ctx, CGSizeMake(2, 2), 0, [UIColor blackColor].CGColor);
// CGContextDrawPath(ctx, kCGPathFillStroke);//最后一个参数是填充类型,渲染出来draw
//// CGContextAddPath(ctx, path1);
////CGContextAddPath(<#CGContextRef _Nullable c#>, <#CGPathRef _Nullable path#>)
//
/*上下文相当一个画布。! 把他理解成一个view, 你就是在这个view上面搞事。!
CGContextRef context = UIGraphicsGetCurrentContext();
//这个不需要添加到上下文中
UIFont *fount = [UIFont boldSystemFontOfSize:18];
[@"tL\n 中文名:无敌\n姓名:田雷" drawInRect:CGRectMake(100, 100, 200, 100) withAttributes:@{NSFontAttributeName:fount}];
CGRect arcet = CGRectMake(80, 80, 160, 160);
CGContextSetRGBStrokeColor(context, 0.6, 0.5, 0.5, 1);
CGContextSetLineWidth(context, 3.0);
CGContextAddEllipseInRect(context, arcet); //椭圆
CGContextDrawPath(context, kCGPathStroke);
*///-----------第二次弄-------------
/*
1.通过UIGraphicsGetCurrentContext()获取上下文。。!
*/
CGContextRef contest = UIGraphicsGetCurrentContext();/*1.1 画一把X,但是怎么调线的大小呢?
CGContextSetStrokeColorWithColor(contest, [[UIColor redColor] CGColor]);
CGContextMoveToPoint(contest,20, 20);//代表点
CGContextAddLineToPoint(contest, 100, 100);
CGContextMoveToPoint(contest, 100, 20);
CGContextAddLineToPoint(contest, 20, 100);
/
/1.2 画一个红色填充区域
CGContextSetRGBFillColor(contest, 1, 0, 0, 1);
CGContextFillRect(contest, CGRectMake(100, 100, 200, 200));
/
/1.3用笔画出边框
CGContextStrokeRect(contest, CGRectMake(100, 200, 200, 200));
/
/1.4在rect里面画圆/椭圆
CGContextStrokeEllipseInRect(contest, CGRectMake(100, 0, 100, 200));
/
/1.5实心圆,不可以填充
CGContextFillEllipseInRect(contest, CGRectMake(100, 100, 200, 200));
/
/1.6 画圆第二种方法,半圆
CGContextMoveToPoint(contest, 100, 300);
CGContextAddArcToPoint(contest,50, 300, 50, 350, 50);
/
/1.7画曲线
CGContextSetLineWidth(contest, 2.0);
CGContextSetStrokeColorWithColor(contest, [[UIColor redColor] CGColor]);
CGContextMoveToPoint(contest, 10, 10);
CGContextAddCurveToPoint(contest, 0, 50, 300, 250, 300, 400);
/
/1.8画虚线
CGContextSetLineWidth(contest, 5.0);
CGContextSetStrokeColorWithColor(contest, [[UIColor grayColor] CGColor]);
// //实线虚线相间 实宽(2)虚宽(6)实宽(4)虚宽(2)
CGFloat dasharray[] = {2,6,4,2};
CGContextMoveToPoint(contest, 10, 200);
CGContextSetLineDash(contest,
3,//跳过3个再画虚线,所以刚开始有6-(3-2)=5个虚点dasharray, 4);
CGContextMoveToPoint(contest, 10, 200);
CGContextAddQuadCurveToPoint(contest, 150, 10, 300, 200);
CGContextStrokePath(contest);
/
/1.9 绘制图片
NSString *path = [[NSBundle mainBundle] pathForResource:@"ascii" ofType:@"jpg"];
UIImage *myimage = [[UIImage alloc] initWithContentsOfFile:path];
[myimage drawInRect:CGRectMake(0, 0, 200, 200)];
NSString s = @"ascii码";
[s drawAtPoint:CGPointMake(100, 0) withAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:34.0]}];
/
/
CGContextClip(contest);
CGColorSpaceRef rgb = CGColorSpaceCreateDeviceRGB();
CGFloat colors[] =
{
204.0 / 255.0, 224.0 / 255.0, 244.0 / 255.0, 1.00,
29.0 / 255.0, 156.0 / 255.0, 215.0 / 255.0, 1.00,
0.0 / 255.0, 50.0 / 255.0, 126.0 / 255.0, 1.00,
};
CGGradientRef gradient = CGGradientCreateWithColorComponents
(rgb, colors, NULL, sizeof(colors)/(sizeof(colors[0])4));
CGColorSpaceRelease(rgb);
CGContextDrawLinearGradient(contest, gradient,CGPointMake
(0.0,0.0) ,CGPointMake(0.0,self.frame.size.height),
kCGGradientDrawsBeforeStartLocation);
/
/ CGMutablePathRef 这个不好用。。!CGMutablePathRef path = CGPathCreateMutable();
//移动到指定位置
CGPathMoveToPoint(path, nil, 10, 300);
//绘制直线
CGPathAddLineToPoint(path, nil, 30, 20);
//添加到上下文
CGContextAddPath(contest, path);
CGContextAddArc(contest, 200, 200, 1, 1, 1, 1);CGContextFillPath(contest);
//又创建一条
CGMutablePathRef path1 = CGPathCreateMutable();CGPathMoveToPoint(path1, nil, 30, 60);
CGPathAddLineToPoint(path1, nil, 30, 100);
CGContextAddPath(contest, path1);
/
/2.1,第三种方法 贝塞尔弄路径,与1.1进行对比 UIBezierPath *path = [UIBezierPath bezierPath];
[path moveToPoint:CGPointMake(10, 10)];
[path addLineToPoint:CGPointMake(100, 100)];
[[UIColor blueColor] setStroke];
CGContextAddPath(contest, path.CGPath);
CGContextSetLineWidth(contest, 10);
CGContextStrokePath(contest);
*//2.2总结下,用UIBezierPath 比上面两个都要好用。。!/
CGContextRef contextRef = UIGraphicsGetCurrentContext();
UIBezierPath * path = [UIBezierPath bezierPathWithRect:CGRectMake(10, 10, 100, 100)];
[[UIColor greenColor]set];
CGContextAddPath(contextRef, path.CGPath);
CGContextFillPath(contextRef);
}
这块的东西还有很多!不正确请斧正!
共同学习。。!