IOS开发之Quartz2D绘图


//自定义绘制图形,调用drawRect方法

- (void)drawRect:(CGRect)rect {

   //首先拿到上下文

    CGContextRef context = UIGraphicsGetCurrentContext();

//    [self drawLine:context];



}


#pragma mark - 绘制线条

- (void)drawLine:(CGContextRef)context

{

    //1.获取上下文

    //context

    

    //2.创建绘制的路径(path)

    //路径

    //CGPathRef 不可变

    //CGMutablePathRef 可变路径

    CGMutablePathRef path = CGPathCreateMutable();

    

    //设置起始点

    CGPathMoveToPoint(path, NULL, 50, 50);

    

    //连线到下一点

    CGPathAddLineToPoint(path, NULL, 200, 200);

    CGPathAddLineToPoint(path, NULL, 50, 200);

    

    //关闭路径

    CGPathCloseSubpath(path);

    

    //3.把路径添加到上下文中

    CGContextAddPath(context, path);

    

    //4.设置上下文的属性

    //线条的颜色

    CGContextSetRGBStrokeColor(context, 41/255.0, 110/255.0, 222/255.0, 1);

    //填充的颜色

    CGContextSetRGBFillColor(context, 150/255.0, 50/255.0, 100/255.0, 1);

    

    //线条宽度

    CGContextSetLineWidth(context, 5);

    

    //连接点的样式

    CGContextSetLineJoin(context, kCGLineJoinRound);

    

    //5.绘制路径

    /*

     kCGPathFill,   //只填充

     kCGPathEOFill, //异或

     kCGPathStroke, //只画线

     kCGPathFillStroke,     //填充和画线

     kCGPathEOFillStroke

     */

    CGContextDrawPath(context, kCGPathFillStroke);

    

    //6.释放路径

    CGPathRelease(path);

    

}

#pragma mark - 绘制矩形

- (void)drawShapeRect:(CGContextRef)context

{

    //方法一

    /*

    //设置绘制的区域

    CGRect rect = CGRectMake(40, 40, 100, 200);

    

    //设置区域添加到上下文

    CGContextAddRect(context, rect);

    

    //UIKit封装的设置颜色的方法

    [[UIColor redColor] setStroke];

    [[UIColor blueColor] setFill];

    

    //绘制

    CGContextDrawPath(context, kCGPathFillStroke);

     */

    //方法二

    //UIKit

    CGRect rect = CGRectMake(40, 40, 100, 200);

    

    [[UIColor redColor] setStroke];

    [[UIColor blueColor] setFill];

    

    //调用,直接开始绘图

    UIRectFill(rect);   //填充

    UIRectFrame(rect);  //框架

 

}


#pragma mark - 绘制圆形

- (void)drawCircle:(CGContextRef)context

{

    //

    /*

     * x,y     圆心

     * radius  半径

     * startAngle endAngle  起始和结束的角度(单位 弧度)

     * clockwise  顺时针 0 / 逆时针 1

     */

    //CGContextAddArc(context, 160, 200, 50, 0, M_PI_2, 1);

    

    //内切圆

    CGRect rect = CGRectMake(50, 50, 200, 100);

    [[UIColor orangeColor] setStroke];

    UIRectFrame(rect);

    

    CGContextAddEllipseInRect(context, CGRectMake(50, 50, 200, 100));

    

    [[UIColor redColor] setStroke];

    [[UIColor brownColor] setFill];

    

    CGContextDrawPath(context, kCGPathFillStroke);

}


#pragma mark - 贝塞尔曲线

- (void)drawCurve:(CGContextRef)context

{

    //起始点

    CGContextMoveToPoint(context, 20, 50);

    

    /*

     * 1x, 1y 第一条切线的终点

     * 2x, 2y 第二条切线的起始点

     * x, y 第二条切线的终点

     */

//    CGContextAddCurveToPoint(context, 100, 20, 200, 300, 300, 50);

    

    CGContextAddQuadCurveToPoint(context, 160, 20, 300, 200);

    

    CGContextDrawPath(context, kCGPathStroke);


}


#pragma mark - 绘制文本

- (void)drawText:(CGContextRef)context

{

    //1.绘制的文字

    NSString *str = @"wxhl34";

    

    //2.定义绘制的区域

    CGRect rect = CGRectMake(50, 50, 200, 50);

    

    UIRectFrame(rect);

    

    //3.设置绘制的样式

    //文本段落的样式

    NSMutableParagraphStyle *style = [[NSMutableParagraphStyle defaultParagraphStyle] mutableCopy];

    style.lineBreakMode = NSLineBreakByCharWrapping;

    style.alignment = NSTextAlignmentRight;

    

    NSDictionary *attr = @{

                           NSFontAttributeName:[UIFont systemFontOfSize:20],

                           NSParagraphStyleAttributeName:style

                           };

    

    

    //4.绘制

    [str drawInRect:rect withAttributes:attr];

}


#pragma mark - 绘制图片

- (void)drawImage:(CGContextRef)context

{

    //图片

    UIImage *image = [UIImage imageNamed:@"baymax.jpg"];

    

    //1.以指定点为起点绘制

    [image drawAtPoint:CGPointMake(20, 400)];

    

    //2.在指定区域绘制,会自动拉伸

    //[image drawInRect:CGRectMake(0, 0, 100, 200)];


    

    //坐标系转换

    //CG   UIKit

    //保存当前的上下文

    CGContextSaveGState(context);

    

    //CGContextTranslateCTM(context, 0, 200);

    //y轴取反

    CGContextScaleCTM(context, 1, -1);

    //y轴上移200

    CGContextTranslateCTM(context, 0, -200);

    

    

    /*

    CGContextRotateCTM(context, M_PI);      //旋转

    CGContextScaleCTM(context, -1, 1);      //缩放

    CGContextTranslateCTM(context, 0, -200);    //平移

     */

    

    //CG

    //UIImage --> CGImageRef

    //UIKit       Core Graphics     AppKit

    CGContextDrawImage(context, CGRectMake(0, 0, 320, 200), image.CGImage);

    

    //恢复之前保存的上下文

    CGContextRestoreGState(context);

}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值