您的位置:首页 > 其它

Core Animation -CGContextRef的运用,还有详细解释

2016-03-31 17:49 465 查看
这个方法要写在继承了UIView的类里。

- (void)drawRect:(CGRect)rect

{
CGContextRef context=UIGraphicsGetCurrentContext();

//画线-------------
//设置起点
CGContextMoveToPoint(context, 20, 20);
//设置终点
CGContextAddLineToPoint(context, 300, 20);
//设置线宽
CGContextSetLineWidth(context, 5);
//设置颜色
CGContextSetStrokeColorWithColor(context, [UIColor orangeColor].CGColor);
//开始画
CGContextDrawPath(context, kCGPathStroke);

//画圆------------
//几个参数除了context外,分别是圆心的x,圆心的y,半径,起始角度,结束角度,顺时针逆时针,0为顺时针
CGContextAddArc(context, 85, 95, 65, 0, M_PI*2, 1);
//设置线宽
CGContextSetLineWidth(context, 2);
//设置线的颜色
CGContextSetStrokeColorWithColor(context, [UIColor redColor].CGColor);
//开始画圆
CGContextDrawPath(context, kCGPathStroke);

//画填充圆
//几个参数除了context外,分别是圆心的x,圆心的y,半径,起始角度,结束角度,顺时针逆时针,0为顺时针
CGContextAddArc(context, 235, 95, 65, 0, M_PI*2, 1);
//设置边框颜色
CGContextSetStrokeColorWithColor(context, [UIColor redColor].CGColor);
//设置填充颜色
CGContextSetFillColorWithColor(context, [UIColor cyanColor].CGColor);
//设置线宽
CGContextSetLineWidth(context, 1);
//画图并填充(这里的参数要注意了,有填充一定要用带fill的,否则是不会填充的)
CGContextDrawPath(context, kCGPathFillStroke);

//画三角形
CGPoint anglePoint[3];
anglePoint[0]=CGPointMake(70, 105);
anglePoint[1]=CGPointMake(100, 105);
anglePoint[2]=CGPointMake(85, 80);
//参数依次是点的数组和数量
CGContextAddLines(context, anglePoint, 3);
//设置线条颜色
CGContextSetStrokeColorWithColor(context, [UIColor blackColor].CGColor);
//把三个点连线封闭起来
CGContextClosePath(context);
CGContextDrawPath(context, kCGPathStroke);

//画填充三角形
CGPoint anglePoint1[3];
anglePoint1[0]=CGPointMake(220, 105);
anglePoint1[1]=CGPointMake(250, 105);
anglePoint1[2]=CGPointMake(235, 80);
//参数依次是点的数组和数量
CGContextAddLines(context, anglePoint1, 3);
CGContextSetStrokeColorWithColor(context, [UIColor blackColor].CGColor);
//设置填充色
CGContextSetFillColorWithColor(context, [UIColor blackColor].CGColor);
//把三个点连线封闭起来
CGContextClosePath(context);
CGContextDrawPath(context, kCGPathFillStroke);

//画一个椭圆
CGContextAddEllipseInRect(context, CGRectMake(20, 180, 280, 130));
CGContextSetStrokeColorWithColor(context, [UIColor blueColor].CGColor);
CGContextSetLineWidth(context, 6);
CGContextDrawPath(context, kCGPathStroke);

//画一个矩形
CGContextAddRect(context, CGRectMake(80, 200, 160, 90));
CGContextSetStrokeColorWithColor(context, [UIColor greenColor].CGColor);
CGContextSetLineWidth(context, 4);
CGContextDrawPath(context, kCGPathStroke);

//画一个圆角矩形
/*
CGContextAddArcToPoint(<#CGContextRef  _Nullable c#>, <#CGFloat x1#>, <#CGFloat y1#>, <#CGFloat x2#>, <#CGFloat y2#>, <#CGFloat radius#>)
x1,y1是startPoint   x2,y2是endPoint   radius是半径
博主在这里简单解释下这里的核心,这里会有三个点,第一个点是开始画的那个点current point,就是CGContextMoveToPoint移动到的那个点,第二个点是起点,第三个点是终点,当绘制结束后,终点就成为了新的current point,我们知道三个点可以决定一个圆,所以我们要做的就是使这三个点始终能够形成大于0度小于180的角,圆弧是通过与两条直线的夹角形成的切线绘制的,这样就可以绘制出圆角弧度,还是不明白的请留言或者私信
*/
int X=120;
int Y=220;
CGContextMoveToPoint(context, X+10, Y);
//左上角
CGContextAddArcToPoint(context, X, Y , X, Y+10, 10);
//左下角
CGContextAddArcToPoint(context, X, Y+50 , X+10, Y+50, 10);
//右下角
CGContextAddArcToPoint(context, X+80, Y+50 , X+80, Y+40, 10);
//右上角
CGContextAddArcToPoint(context, X+80, Y , X+10, Y, 10);

CGContextSetStrokeColorWithColor(context, [UIColor redColor].CGColor);
CGContextSetFillColorWithColor(context, [UIColor redColor].CGColor);
CGContextClosePath(context);
CGContextDrawPath(context, kCGPathFillStroke);

//二次贝塞尔曲线
//设置起点
CGContextMoveToPoint(context, 80, 400);
//设置贝塞尔曲线的控制点坐标和终点坐标
CGContextAddQuadCurveToPoint(context,140, 300, 220, 400);
CGContextSetStrokeColorWithColor(context, [UIColor yellowColor].CGColor);
CGContextSetLineWidth(context, 3);
CGContextStrokePath(context);

//三次贝塞尔曲线
//设置起点
CGContextMoveToPoint(context, 40, 560);
//设置贝塞尔曲线的控制点坐标和终点坐标
CGContextAddCurveToPoint(context, 30, 400, 240, 440, 280, 560);
CGContextSetStrokeColorWithColor(context, [UIColor yellowColor].CGColor);
CGContextSetLineWidth(context, 3);
CGContextStrokePath(context);

}


代码下载地址:https://github.com/codeliu6572/CGContextRefForUse
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: