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);
    }
  • 相关阅读:
    GPS坐标转百度地图并且加载地图示例.支持微信端访问
    关于vs2013 mysql Ef框架中提示版本不兼容问题的解决办法
    CSS3 关于@font-face引用中文字体解决办法
    登录权限,菜单动态加载,动态渲染功能按钮
    vue-router使用next()跳转到指定路径时会无限循环
    三张图较为好理解JavaScript的原型对象与原型链
    深入javascript之原型和原型链
    vue2.0引入现有css文件
    定制简单的404和403页面
    弹框内画echarts图dom元素无法获取的问题
  • 原文地址:https://www.cnblogs.com/XXxiaotaiyang/p/5027279.html
Copyright © 2011-2022 走看看