quartz2d基本绘图

一,quartz2d基本绘图
    Quartz 2D是一个二维绘图引擎,同时支持iOS和Mac系统。利用UIKit框架,我们可以搭建和实现一些简单的,常见的UI界面。但是,有些UI界面极其复杂,而且比较个性化,用普通的UI控件无法实现,这时可以利用Quartz2D技术将控件内部的结构画出来,自定义控件的样子。
    1,上下文:Graphics Context
        封装了Quartz绘制图像到输出设备的信息它保存了绘图信息,绘图状态以及图形的输出目标。
    2,坐标系:跟UI保持一致
    3,内存管理:出现Create,copy,retain时要释放。
    4,绘制图形




        1)绘制一条直线
-(void)drawLine{
    //获取一个与视图相关联的上下文
    CGContextRef context=UIGraphicsGetCurrentContext();
    //---------------------
#if 1
    //构建路径
    CGMutablePathRef path=CGPathCreateMutable();
    //设置路径起点
    CGPathMoveToPoint(path,NULL, 10, 10);
    //添加路径
    CGPathAddLineToPoint(path, NULL, 50, 50);
    CGPathAddLineToPoint(path, NULL, 10, 60);
    CGPathAddLineToPoint(path, NULL, 60, 100);
    //关闭路径,闭环,不关闭时,首尾不会连接
    CGPathCloseSubpath(path);
    //添加路径到上下文
    CGContextAddPath(context, path);
    //释放path
    CGPathRelease(path);
#else
    //第二种添加路径方式
    CGContextMoveToPoint(context, 10, 10);
    CGContextAddLineToPoint(context, 50, 50);
    CGContextAddLineToPoint(context, 10, 60);
    CGContextAddLineToPoint(context, 60, 100);
    CGContextClosePath(context);
#endif
    //---------------------
    //设置画笔RGB颜色
//    CGContextSetRGBStrokeColor(context, 1, 0, 0, 1);
    [[UIColor purpleColor]setStroke];
    //设置线宽
    CGContextSetLineWidth(context, 6);
    //---------------------
    //设置填充颜色,填充颜色,会在路径封闭的区域内进行填充
//    CGContextSetRGBFillColor(context, 0, 0, 1, 1);
    [[UIColor greenColor]setFill];
    //---------------------
    //设置线段链接样式
    /*
     kCGLineJoinMiter, 斜角,一起尖角
     kCGLineJoinRound, 圆角
     kCGLineJoinBevel  斜角,各自斜角
     */
    CGContextSetLineJoin(context, kCGLineJoinBevel);
    //设置线帽样式
    /*
     kCGLineCapButt,
     kCGLineCapRound,
     kCGLineCapSquare
     */
    CGContextSetLineCap(context, kCGLineCapSquare);
    //设置虚线
    CGFloat lengths[]={5,10};
    //绘制虚线的四个参数:
    /*
     1,上下文
     2,phase相位
     3,数组
     4,数组长度
     绘制法则:首先绘制5-2个点,跳过10个点,再绘制5个点,跳过10个点..
     如果lengths是{5,10,12}:首先绘制5-2个点,跳过10个点,再绘制12个点,跳过5个点,再绘制10个点,跳过12个点。。。
     */
    CGContextSetLineDash(context, 2, lengths, 3);
    //绘制路线
    /*
     kCGPathFill,  表示用非零绕数规则
     kCGPathEOFill,  表示用奇偶规则
     kCGPathStroke,  表示描线,不填充;
     kCGPathFillStroke,  表示填充和描线;
     kCGPathEOFillStroke 描线填充
     */
    //绘制填充和描线
//    CGContextDrawPath(context, kCGPathFillStroke);
    //只绘制填充
    CGContextFillPath(context);
    //只描线
    CGContextStrokePath(context);
}
        2)绘制一个矩形
-(void)drawRect{
    //获取上下文
    CGContextRef context=UIGraphicsGetCurrentContext();
    //设置颜色填充
    [[UIColor redColor]setFill];
    //设置画笔颜色
    [[UIColor greenColor]setStroke];
    //设置线宽
    CGContextSetLineWidth(context, 2);
    //填充矩形:
//    CGContextFillRect(context, CGRectMake(50, 50, 100, 100));
    UIRectFill(CGRectMake(50, 50, 100, 100));
    //绘制矩形
    CGContextStrokeRect(context, CGRectMake(50, 50, 100, 100));
    //添加一个矩形到context,这个方法不会直接绘制矩形,需要调用绘制方法
    CGContextAddRect(context, CGRectMake(150, 100, 40, 40));
    CGContextStrokePath(context);
}
        3)绘制一条弧线
-(void)drawArc{
    //获取上下文
    CGContextRef context=UIGraphicsGetCurrentContext();
    //设置画笔颜色
    [[UIColor purpleColor]setStroke];
    //设置线宽
    CGContextSetLineWidth(context, 10);
    //设置线帽
    CGContextSetLineCap(context, kCGLineCapButt);
    /*
     参数说明:
     1,上下文
     2 3,x,y表示弧的中心点
     4,半径
     5,起始弧度
     6,结束弧度
     7,是否顺时针方向0表示顺时针,1表示逆时针
     */
    CGContextAddArc(context, 200, 200, 5, 0, M_PI, 1);
    CGContextStrokePath(context);
}
        4)绘制文本
-(void)drawText{
    NSString * text=@"看这里哦";
    //设置颜色
    [[UIColor purpleColor]setStroke];
    UIFont * font=[UIFont fontWithName:@"Marker Felt" size:20];
    [text drawAtPoint:CGPointMake(100, 100) withAttributes:@{NSFontAttributeName:font,NSForegroundColorAttributeName:[UIColor redColor]}];
    
    CGRect rect = CGRectMake(50, 200, 200, 40);
    [[UIColor blueColor]set];
    UIRectFill(rect);
    [[UIColor redColor]set];
    // 只能用居中、左、右对齐
    NSMutableParagraphStyle *paragraph = [[NSMutableParagraphStyle alloc] init];
    paragraph.alignment = NSTextAlignmentCenter;
    [text drawInRect:rect withAttributes:@{NSFontAttributeName:font,NSForegroundColorAttributeName:[UIColor redColor],NSParagraphStyleAttributeName:paragraph}];
    //关于文字font更多Attributes  http://blog.sina.com.cn/s/blog_8d1bc23f0101etmr.html
}
        5)绘制图像
-(void)drawImage{
    UIImage * image=[UIImage imageNamed:@"hehe"];
    //从某个点开始,原图大小绘制
    [image drawAtPoint:CGPointMake(10, 10)];
    //在某个rect中绘制,会拉伸,收缩
    [image drawInRect:CGRectMake(0, 0, 80, 80)];
    //在某个rect中平铺
    [image drawAsPatternInRect:CGRectMake(0, 100, 80, 80)];
}
        6)坐标系的平移,旋转和缩放
-(void)drawSome{
    // 取出上下文
    CGContextRef context = UIGraphicsGetCurrentContext();
    [[UIColor redColor]setStroke];
    
    //平移操作----------------------
    // 备份上下文
    CGContextSaveGState(context);
    // 对上下文做一个平移操作
    CGContextTranslateCTM(context, 50, 50);
    CGContextStrokeRect(context, CGRectMake(0, 0, 100, 50));
    // 恢复上下文
    CGContextRestoreGState(context);
    [[UIColor blackColor]setStroke];
    CGContextStrokeRect(context, CGRectMake(0, 0, 100, 50));
    
    //旋转操作----------------------
    //备份上下文
    CGContextSaveGState(context);
    // 对坐标系进行旋转,按照原点进行旋转
    CGContextRotateCTM(context, M_PI_4);
    [[UIColor greenColor]setStroke];
    CGContextStrokeRect(context, CGRectMake(0, 0, 100, 50));
    // 恢复上下文
    CGContextRestoreGState(context);
    
    //缩放操作----------------------
    //备份上下文
    CGContextSaveGState(context);
    // 原点不动,坐标系宽高缩放
    CGContextScaleCTM(context, 0.5, 0.5);
    [[UIColor purpleColor]setStroke];
    CGContextStrokeRect(context, CGRectMake(10, 10, 100, 50));
    // 恢复上下文
    CGContextRestoreGState(context);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值