Quartz2d 画图

第一种:画线

static void drawLine(void){

    //获取上下文

    CGContextRef ctx=UIGraphicsGetCurrentContext();

    //创建一个路径

    CGMutablePathRef path=CGPathCreateMutable();

    //把画笔移动到某个点(某个起始点)

    CGPathMoveToPoint(path, NULL, 20, 20);

    //添加一个直线到path

    //    CGPathAddLineToPoint(path, NULL, 100, 10);

    //    CGPathAddLineToPoint(path, NULL, 100, 50);

    //    CGPathAddLineToPoint(path, NULL, 10, 50);

    

    CGPathAddLineToPoint(path, NULL, 200, 20);

    //形成一个闭环

    //    CGPathCloseSubpath(path);

    //添加到context

    CGContextAddPath(ctx, path);

    CGPathRelease(path);

    //设置画笔颜色

    [[UIColor purpleColor]setStroke];

    //设置画笔粗细

    CGContextSetLineWidth(ctx,1);

    //设置填充颜色

    [[UIColor yellowColor]setFill];

    //设置路径中线段之间的连接样式

    /*

     kCGLineJoinMiter, 斜角,一起尖角

     kCGLineJoinRound, 圆角

     kCGLineJoinBevel  斜角,各自斜角

     */

    CGContextSetLineJoin(ctx, kCGLineJoinBevel);

    //设置线帽样式

    /*

     kCGLineCapButt,

     kCGLineCapRound,

     kCGLineCapSquare

     */

    CGContextSetLineCap(ctx, kCGLineCapRound);

    

    

    //设置虚线

    CGFloat lengths[]={5,10,15};

    //绘制虚线的四个参数:

    /*

     1,上下文

     2,phase相位

     3,数组

     4,数组长度

     绘制法则:首先绘制5-2个点,跳过10个点,再绘制5个点,跳过10个点..

     如果lengths{5,10,12}:首先绘制5-2个点,跳过10个点,再绘制12个点,跳过5个点,再绘制10个点,跳过12个点。。。

     */

    CGContextSetLineDash(ctx, 0, lengths, 3);

    

    //    //描线

    //    CGContextStrokePath(ctx);

    //    //只绘制填充颜色

    //    CGContextFillPath(ctx);

    //绘制路线

    /*

     kCGPathFill,  表示用非零绕数规则

     kCGPathEOFill,  表示用奇偶规则

     kCGPathStroke,  表示描线,不填充;

     kCGPathFillStroke,  表示填充和描线;

     kCGPathEOFillStroke 描线填充

     */

    //绘制填充和描线

    CGContextDrawPath(ctx, kCGPathFillStroke);

}


画图形:

-(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);

}


画比例图:

-(void)drawArc{

    //获取上下文

    CGContextRef context=UIGraphicsGetCurrentContext();

    //设置画笔颜色

    [[UIColor purpleColor]setStroke];

    //设置线宽

    CGContextSetLineWidth(context, 100);

    //设置线帽

    CGContextSetLineCap(context, kCGLineCapButt);

    /*

     参数说明:

     1,上下文

     2 3xy表示弧的中心点

     4,半径

     5,起始位置弧度

     6,结束位置弧度

     7,是否顺时针方向0表示顺时针,1表示逆时针

     */

    static int k;

    CGContextAddArc(context, 200, 200, 50, -M_PI_2, -M_PI_2+k, 0);

    CGContextStrokePath(context);

    k++;

}


设置文本:

-(void)drawText{

    NSString * text=@"看这里哦";

    //设置颜色

    [[UIColor purpleColor]setStroke];

    UIFont * font=[UIFont fontWithName:@"Marker Felt" size:16];

    [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

}



设置图形:

-(void)drawImage{

    

    //画圆,以便以后指定可以显示图片的范围

    //获取图形上下文

   CGContextRef ctx=UIGraphicsGetCurrentContext();

    CGContextAddEllipseInRect(ctx, CGRectMake(100, 100, 50, 50));

    //指定上下文中可以显示内容的范围就是圆的范围

    CGContextClip(ctx);

    

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

    //从某个点开始,原图大小绘制

    [image drawAtPoint:CGPointMake(10, 10)];

//    //在某个rect中绘制,会拉伸,收缩

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

//    //在某个rect中平铺

//    [image drawAsPatternInRect:CGRectMake(0, 100, 80, 80)];

}

#import "MYView.h"


@implementation MYView


static void drawLine(){

    //获取上下文

    CGContextRef context=UIGraphicsGetCurrentContext();

    //画一条线

    CGMutablePathRef path=CGPathCreateMutable();

    CGPathMoveToPoint(path, NULL, 50, 50);

    CGPathAddLineToPoint(path, NULL, 100, 100);

    CGPathAddLineToPoint(path, NULL, 50, 100);

//    CGPathAddLineToPoint(path, NULL, 100, 200);

//    CGPathCloseSubpath(path);

    CGContextAddPath(context, path);

    CGPathRelease(path);

    //指定下画笔的颜色

    CGContextSetRGBStrokeColor(context, 1, 0, 0, 1);

    //    [[UIColor blueColor]setStroke];

    //指定封闭区间的填充色

    CGContextSetRGBFillColor(context, 0, 1, 0, 1);

    

    //设置线条的粗细

    CGContextSetLineWidth(context, 1);

    //设置线段链接的样式

    /*

     kCGLineJoinMiter, 斜角,一起尖角

     kCGLineJoinRound, 圆角

     kCGLineJoinBevel  斜角,各自斜角

     */

    CGContextSetLineJoin(context, kCGLineJoinRound);

    //设置线帽样式

    /*

     kCGLineCapButt,

     kCGLineCapRound,

     kCGLineCapSquare

     */

    CGContextSetLineCap(context, kCGLineCapRound);

    //这个方法只能描线

    //    CGContextStrokePath(context);

    //这个方法只能填充颜色

    //    CGContextFillPath(context);

    /*

     kCGPathFill,  表示用非零绕数规则

     kCGPathEOFill,  表示用奇偶规则

     kCGPathStroke,  表示描线,不填充;

     kCGPathFillStroke,  表示填充和描线;

     kCGPathEOFillStroke 描线填充

     */

    CGFloat num[]={5,10,15};

    CGContextSetLineDash(context,2,num,3);

    CGContextDrawPath(context, kCGPathFillStroke);

}


static void drawMyRect(){

    CGContextRef context=UIGraphicsGetCurrentContext();

    [[UIColor redColor]setStroke];

    [[UIColor cyanColor]setFill];

    CGContextSetLineWidth(context, 3);

    

//    //只绘制矩形填充色

//    UIRectFill(CGRectMake(40, 40, 200, 100));

    //只绘制矩形边框,无填充

//    CGContextStrokeRect(context, CGRectMake(40, 40, 200, 100));

    //同时绘制填充和描线

    CGContextAddRect(context,CGRectMake(40, 40, 200, 100));

    CGContextDrawPath(context, kCGPathFillStroke);

}

static int k;

static void drawArc(){

    CGContextRef context=UIGraphicsGetCurrentContext();

    CGContextSetLineWidth(context, 40);

    [[UIColor redColor]setStroke];

    CGContextSetLineCap(context, kCGLineCapButt);

    CGContextAddArc(context, 100, 100, 50, -M_PI_2, -M_PI_2+(k++), 0);

    CGContextStrokePath(context);

}


static void drawText(){

    NSString * str=@"明明也不困";

    [[UIColor purpleColor]setStroke];

    //设置文字属性

    UIFont * font=[UIFont fontWithName:@"Marker Felt" size:20];

    [str drawAtPoint:CGPointMake(10, 10) withAttributes:@{NSFontAttributeName:font,NSForegroundColorAttributeName:[UIColor blueColor]}];

    

    CGRect rect=CGRectMake(10, 60, 200, 30);

    [[UIColor cyanColor]setFill];

    UIRectFill(rect);

    // 只能用居中、左、右对齐

    NSMutableParagraphStyle *paragraph = [[NSMutableParagraphStyle alloc] init];

    paragraph.alignment = NSTextAlignmentCenter;

    [str drawInRect:rect withAttributes:@{NSFontAttributeName:font,NSForegroundColorAttributeName:[UIColor blueColor],NSParagraphStyleAttributeName:paragraph}];

}


static void drawImage(){

    

    CGContextRef context=UIGraphicsGetCurrentContext();

    CGContextMoveToPoint(context, 30, 30);

    CGContextAddLineToPoint(context, 150, 30);

    CGContextAddLineToPoint(context, 100, 150);

    CGContextClosePath(context);

    CGContextClip(context);

    

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

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

    [image drawInRect:CGRectMake(5, 5, 100, 150)];

    [image drawAsPatternInRect:CGRectMake(5, 200, 100, 150)];

}


static void drawMore(){

    CGContextRef context=UIGraphicsGetCurrentContext();

    [[UIColor greenColor]setStroke];

    //备份上下文

    CGContextSaveGState(context);

    CGContextTranslateCTM(context , 50, 50);

    CGContextStrokeRect(context, CGRectMake(0, 0, 200, 100));

    CGContextRestoreGState(context);

    

    CGContextSaveGState(context);

    CGContextRotateCTM(context, M_PI_4);

    [[UIColor redColor]setStroke];

    CGContextStrokeRect(context,CGRectMake(0, 0, 200, 100));

    CGContextRestoreGState(context);

    

    CGContextSaveGState(context);

    [[UIColor blueColor]setStroke];

    CGContextSetLineWidth(context, 10);

    CGContextScaleCTM(context, 0.5, 0.5);

    CGContextStrokeRect(context,CGRectMake(0, 0, 200, 100));

}


- (void)drawRect:(CGRect)rect {

    NSLog(@"drawRect!");

//    drawLine();

//    drawMyRect();

//    drawArc();

//    drawText();

//    drawImage();

    drawMore();

}




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值