首页 > 其他 > 详细

03-图形上下文栈, 图形的平移 旋转 缩放

时间:2015-12-07 20:39:58      阅读:145      评论:0      收藏:0      [点我收藏+]

图形上下文栈存储着图形的现有的绘画状态,如果有需求,在同一个View中画不同粗细的线,就需要保存两份绘画状态,每份绘画状态保存一种属性

- (void)drawRect:(CGRect)rect {
    // Drawing code
    
    // 需求: 先画一个矩形,颜色为红色,线宽为3
    //       再画一个矩形,颜色为黑色,线宽为默认
    
    // 上下文
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    
    // 保存一个当前上下文的绘图状态到一个栈里面
    // G代理Graphics[绘图]
    CGContextSaveGState(ctx);
    CGContextSaveGState(ctx);
    
    // 画红色,线宽为3的矩形
    [[UIColor redColor] set];
    CGContextSetLineWidth(ctx, 5);
    CGContextAddRect(ctx, CGRectMake(10, 10, 100, 100));
    CGContextStrokePath(ctx);
    
    // 画黑色,线宽为默认的矩形
//    [[UIColor blackColor] set];
//    CGContextSetLineWidth(ctx, 1);
    
    // 恢复 当前上下文的状态
    CGContextRestoreGState(ctx);
    
    CGContextAddRect(ctx, CGRectMake(10, 120, 50, 50));
    CGContextStrokePath(ctx);
    
    //再恢复
#warning 恢复状态不能随便调用,保存了多少次绘图状态,就可以调用多少
    CGContextRestoreGState(ctx);
    
    
    
}

 平移 旋转 缩放,注意做图形的旋转平移缩放需要再画之前做。不然不生效

 

- (void)drawRect:(CGRect)rect {
    // Drawing code
    //矩阵操作 平移、绽放,旋转
    
    // 画个三角形 + 画一条线
    
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    
#warning qurtz2d的平移,要在绘制之前
    //平移
//    CGContextTranslateCTM(ctx, 0,50);
    
    //缩放
//    CGContextScaleCTM(ctx, 1.5, 1.5);
    
    //旋转
    // 负数 逆时针/ 正数 顺时针
    // 围绕左上角(0,0) 旋转
    CGContextRotateCTM(ctx, - M_PI * 0.2);

    // 定义三个点
//    CGPoint points[3] = {{50,20},{100,80},{10,80}};
//    CGContextAddLines(ctx, points, 3);
//    
//    // 合并三个点的路径
//    CGContextClosePath(ctx);
//    
    
//    // 画线
    CGPoint linePoints[2] = {{0,0},{80,80}};
    CGContextAddLines(ctx, linePoints, 2);
    CGContextStrokePath(ctx);
    

    
    // 渲染
    CGContextStrokePath(ctx);
}

 

03-图形上下文栈, 图形的平移 旋转 缩放

原文:http://www.cnblogs.com/XXxiaotaiyang/p/5027279.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!