zoukankan      html  css  js  c++  java
  • 03-图形上下文栈, 图形的平移 旋转 缩放

    图形上下文栈存储着图形的现有的绘画状态,如果有需求,在同一个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);
    }
  • 相关阅读:
    bzoj2959
    学习笔记::lct
    bzoj3203
    bzoj1319
    bzoj3625
    bzoj3992
    bzoj1565
    bzoj3513
    平常练习动归(1.胖男孩)———最长公共子序列
    2016 noip 复赛 day2
  • 原文地址:https://www.cnblogs.com/XXxiaotaiyang/p/5027279.html
Copyright © 2011-2022 走看看