IOS绘图

CGContextRef context = UIGraphicsGetCurrentContext();可以获得图形上下文。

CGContextMoveToPoint、CGContextAddLineToPoint两个函数是构建描绘路径。

CGContextClosePath(context);函数是闭合描绘路径。

CGContextStrokePath函数是为闭合路径描边。

[[UIColor blackColor] setStroke]设置描边的颜色。

[[UIColor redColor] setFill]设置要填充颜色。

CGContextDrawPath(context, kCGPathFillStroke);设置描绘路径方式。常用的还有:

kCGPathFill和kCGPathStroke

运用变换 

变换(transformation)修改了图形上下文中绘制图形的方式。可以通过移动、旋转或缩放实现变换。

Quartz提供了多种形式的变换,其中主要:CTM(当前变换矩阵)变换和仿射(affine)变换。

CTM(current transformation matrix)变换,这种变换比较简单,函数有:

CGContextRotateCTM,旋转坐标

CGContextScaleCTM,缩放坐标

CGContextTranslateCTM,移动原点

移动变换

CGContextTranslateCTM (myContext, 100, 50)

从对象角度沿着x轴正向移动100单位,沿着y轴正向移动50单位。

旋转变换

static inline double radians (double degrees) {return degrees * M_PI/180;}

CGContextRotateCTM (myContext, radians(–45.));

从对象角度:

在Quartz坐标下正数为逆时针旋转,负数为顺时针旋转。

在UIKit坐标下正数为顺时针旋转,负数为逆时针旋转。

缩放变换

CGContextScaleCTM (myContext, .5, .75)


使用 CGPathCreateMutable
 - (void)drawRect:(CGRect)rect
  {
      //1.获取图形上下文
      CGContextRef ctx=UIGraphicsGetCurrentContext();
  
      //2.绘图
      //2.a 画一条直线
      //2.a.1创建一条绘图的路径
      //注意:但凡通过Quartz2D中带有creat/copy/retain方法创建出来的值都必须要释放
     CGMutablePathRef path=CGPathCreateMutable();
     
     //2.a.2把绘图信息添加到路径里
     CGPathMoveToPoint(path, NULL, 20, 20);
     CGPathAddLineToPoint(path, NULL, 200, 300);
     
     //2.a.3把路径添加到上下文中
     //把绘制直线的绘图信息保存到图形上下文中
     CGContextAddPath(ctx, path);
     
     
     //2.b画一个圆
     //2.b.1创建一条画圆的绘图路径(注意这里是可变的,不是CGPathRef)
     CGMutablePathRef path1=CGPathCreateMutable();
     
     //2.b.2把圆的绘图信息添加到路径里
     CGPathAddEllipseInRect(path1, NULL, CGRectMake(50, 50, 100, 100));
     
     //2.b.3把圆的路径添加到图形上下文中
     CGContextAddPath(ctx, path1);
     
     
     //3.渲染
     CGContextStrokePath(ctx);
     
     //4.释放前面创建的两条路径
     //第一种方法
     CGPathRelease(path);
     CGPathRelease(path1);
     //第二种方法
 //    CFRelease(path);
 }



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值