您的位置:首页 > 其它

Quartz2D简单图形绘制及操作

2016-01-20 16:46 417 查看
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函数,所以要释放(不是o-c)
    CGPathRelease(path2);
//    CFRelease(path1);
    
    CGContextStrokeRect(ctx,CGRectMake(170,20,50,50));
    CGContextFillRect(ctx,CGRectMake(240,20,50,50)); 
 
}

       
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  QuartzD