Quartz2D简单图形绘制及操作

View继承自UIview,重写view的drawRect方法,此方法由系统调用,如果我们想调它,可以调setNeedDispaly,setNeedDispaly会调drawRect重绘UI

绘制的一般步骤:

1.取得与view关联的上下文context(drawRect方法中才能获取到);

2.绘图;

3.利用context把图绘制到view的图层Layer上;

-(void)drawRect:(CGRect)rect

{

    CGContextRef ctx =UIGraphicsGetCurrentContext();//获取context

    CGContextSaveGState(ctx);//copy ctx 复制一份ctx,避免画出的2条线有相同的属性(圆角,颜色,宽度、、、)(方法2)

    

    CGContextMoveToPoint(ctx,10,10);//画线

    CGContextAddLineToPoint(ctx,50,100);

    //result sencond line have same setup

    CGContextSetLineCap(ctx,kCGLineCapRound);//设置属性

    CGContextSetLineWidth(ctx,20);

    [[UIColorbrownColor]set];

    CGContextStrokePath(ctx);

    

    CGContextMoveToPoint(ctx,50,10);

    CGContextAddLineToPoint(ctx,30,100);

//    CGContextSetLineCap(ctx, kCGLineCapButt);///避免属性重复       重置属性(方法1)

//    CGContextSetLineWidth(ctx, 1);

//    [[UIColor blackColor] set];

    CGContextRestoreGState(ctx); (方法2)//获得干净的ctx

    CGContextStrokePath(ctx);


//    CGContextScaleCTM(ctx, 0.5, 1.5);  //位置不同达到的效果也是不同的,涉及矩阵变换

//    CGContextTranslateCTM(ctx, 50, -50);

    CGContextRotateCTM(ctx,M_PI_4);//before drawRect // rotate the layer of the view     旋转view的图层layer   这是2维的基本变换,底层也就是几个矩阵间点乘

    CGContextScaleCTM(ctx,0.5,1.5);//缩放  CTM:ctrimax

    CGContextTranslateCTM(ctx,50, -50);//平移

    CGContextAddRect(ctx,CGRectMake(200,10,100,100)); //内切圆

    CGContextAddEllipseInRect(ctx,CGRectMake(200,110,50,50));//矩形

    CGContextAddArc(ctx,290,40,30,0,2*M_PI,0);    origin和raduis画圆


    CGContextStrokePath(ctx);

//    [[UIColor whiteColor] set];

//    CGContextFillPath(ctx);//tian chong

    

}

           


              

避免画出的2条线有相同的属性(圆角,颜色,宽度、、、)还有一种很关键的方法,指定CGContextPath或者CGContextSetStrokeColorWithColor

-(void)drawRect:(CGRect)rect

{

    CGContextRef ctx =UIGraphicsGetCurrentContext();

    

    CGMutablePathRef path =CGPathCreateMutable();

    CGPathMoveToPoint(path,NULL,20,20);

    CGPathAddLineToPoint(path,NULL,100,100);

    CGContextSetStrokeColorWithColor(ctx, [UIColorredColor].CGColor);

    CGContextAddPath(ctx, path);//可以理解为context里有一块保存绘图的区域和一块属性配置区域

    CGContextStrokePath(ctx);

    

    CGMutablePathRef path2=CGPathCreateMutable();

    CGPathMoveToPoint(path2,NULL,50,20);

    CGPathAddLineToPoint(path2,NULL,30,100);

    CGContextSetStrokeColorWithColor(ctx, [UIColorblackColor].CGColor);

    CGContextAddPath(ctx, path2);

    CGContextStrokePath(ctx);

    

    CGMutablePathRef path1 =CGPathCreateMutable();

//    [[UIColor redColor] set];

    CGPathAddEllipseInRect(path1,NULL,CGRectMake(100,20,50,50));

    CGContextAddPath(ctx, path1);

    CGContextStrokePath(ctx);

    

    CGPathRelease(path);

    CGPathRelease(path1);//这些都是c函数,所以要释放(不是oc

    CGPathRelease(path2);

//    CFRelease(path1);

    

    CGContextStrokeRect(ctx,CGRectMake(170,20,50,50));

    CGContextFillRect(ctx,CGRectMake(240,20,50,50));   

}


       



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值