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

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

这个方法要写在继承了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

目录
相关文章
|
图形学
Core Animation - 寄宿图<二>
Core Animation - 寄宿图<二>
48 0
|
编解码 iOS开发
Core Animation - 寄宿图<一>
Core Animation - 寄宿图<一>
72 0
Core Animation - 完成块
Core Animation - 完成块
41 0
Core Animation - CATransformLayer的运用
Core Animation - CATransformLayer的运用
47 0
Core Animation - 变换<四>
Core Animation - 变换<四>
63 0
Core Animation - 变换<四>
Core Animation - 变换<三>
Core Animation - 变换<三>
27 0
Core Animation - 变换<三>
Core Animation - 变换<五>
Core Animation - 变换<五>
44 0
Core Animation - 变换<二>
Core Animation - 变换<二>
60 0
Core Animation - 变换<一>
Core Animation - 变换<一>
64 0
Core Animation - 变换<一>
Core Animation - 摇动+循环动态画圆
Core Animation - 摇动+循环动态画圆
56 0
Core Animation - 摇动+循环动态画圆