zoukankan      html  css  js  c++  java
  • Quartz2D知识点聚合案例

    Quartz2D知识点聚合

    基本

         //画图片
        UIImage *image = [UIImage imageNamed:@"阿狸头像"];
        [image drawInRect:rect];
    
        //字体
        NSString *title = @"标题";
        NSMutableDictionary *atr = [NSMutableDictionary dictionary];
        atr[NSFontAttributeName] = [UIFont systemFontOfSize:15];
        //    atr[NSForegroundœColorAttributeName] = [UIColor greenColor];
        [title drawInRect:CGRectMake(120, 20, 100, 20) withAttributes:atr];
    
        //椭圆
        UIBezierPath *path = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(10, 20, 70, 130)];
        [path stroke];
    
        //方形
        UIBezierPath *path1 = [UIBezierPath bezierPathWithRect:CGRectMake(10, 200, 10, 50)];
    
        [path1 stroke];
    
        //圆角方形
        UIBezierPath *path2 = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(100, 30, 100, 100) cornerRadius:10];
        [path2 stroke];
    
        //一个角圆角
        UIBezierPath *path3 = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(210, 90, 80, 70) byRoundingCorners:UIRectCornerTopRight cornerRadii:CGSizeMake(20, 30)];
        [path3 stroke];
    
        //圆弧
        UIBezierPath *path4 = [UIBezierPath bezierPathWithArcCenter:CGPointMake(130, 230) radius:70 startAngle:0 endAngle:M_PI clockwise:YES];
        [path4 stroke];
    
    // 1.获得当前上下文
        CGContextRef ctx = UIGraphicsGetCurrentContext();
    
        // 2.拼接路径
        UIBezierPath *path = [UIBezierPath bezierPath];
        [path moveToPoint:CGPointMake(10, 20)];
        [path addQuadCurveToPoint:CGPointMake(200, 80) controlPoint:CGPointMake(100, 200)];
    
        // 3. 添加路径到上下文
        CGContextAddPath(ctx, path.CGPath);
    
        // 4.渲染上下文
        CGContextStrokePath(ctx);
    

    变换

        //变换
        //平移
    //    CGContextTranslateCTM(ctx, 10, 20);
        //旋转
        CGContextRotateCTM(ctx, M_PI_4);
        //缩放
        CGContextScaleCTM(ctx, 1.2, 1.2);
    

    上下文栈

    • 先保存或者还原上下文栈,再设置状态
    // 1.获得当前上下文
        CGContextRef ctx = UIGraphicsGetCurrentContext();
    
        // 2.拼接路径
        UIBezierPath *path = [UIBezierPath bezierPath];
        [path moveToPoint:CGPointMake(10, 20)];
        [path addQuadCurveToPoint:CGPointMake(200, 80) controlPoint:CGPointMake(100, 200)];
    
        // 3. 添加路径到上下文
        CGContextAddPath(ctx, path.CGPath);
    
        //保存上下文
        CGContextSaveGState(ctx);
    
        //设置上下文状态
        CGContextSetLineWidth(ctx, 10);
        [[UIColor redColor] set];
    
        // 4.渲染上下文
        CGContextStrokePath(ctx);
    
        // 2.拼接路径
        path = [UIBezierPath bezierPath];
        [path moveToPoint:CGPointMake(100, 80)];
        [path addLineToPoint:CGPointMake(200, 200)];
    
        // 3. 添加路径到上下文
        CGContextAddPath(ctx, path.CGPath);
        //还原上下文
        CGContextRestoreGState(ctx);
        //设置上下文状态
        CGContextSetLineWidth(ctx, 5);
        [[UIColor blueColor] set];
    
        // 4.渲染上下文
        CGContextStrokePath(ctx);
    

    生成图片

        UIImage *image = [UIImage imageNamed:@"小黄人"];
        UIGraphicsBeginImageContextWithOptions(image.size, YES, 0);
    
        [image drawAtPoint:CGPointZero];
    
        NSString *str = @"小黄人";
    
        [str drawAtPoint:CGPointZero withAttributes:nil];
    
        image = UIGraphicsGetImageFromCurrentImageContext();
    
        UIGraphicsEndImageContext();
    

    截图

    • 给定裁减区域再渲染
        //开启图片上下文
        UIGraphicsBeginImageContext(view.frame.size);
        //获得当前上下文
        CGContextRef ctx = UIGraphicsGetCurrentContext();
    
        //给定裁减区域-----
        //渲染图片
        [view.layer renderInContext:ctx];
    
        //从当前上下文得到一张图片
        UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    
        //关闭图片上下文
        UIGraphicsEndImageContext();
    
        return image;
    

    擦除

    • 先渲染到上下文,再擦除
     UITouch *touch = [touches anyObject];
    
        CGPoint point = [touch locationInView:self.imageView];
    
        //开启上下文
        UIGraphicsBeginImageContextWithOptions(self.imageView.frame.size, NO, 0);
    
    
        //获得当前上下文
        CGContextRef ctx = UIGraphicsGetCurrentContext();
        //渲染到上下文
        [self.imageView.layer renderInContext:ctx];
    
        //获取擦除区域
        CGRect rect = CGRectMake(point.x - 10, point.y - 10, 20, 20);
        // 擦除上下文的内容
        CGContextClearRect(ctx, rect);
    
        // 生成图片
        UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    
        _imageView.image = image;
        // 关闭上下文
        UIGraphicsEndImageContext();
  • 相关阅读:
    大厂的面试官是如何挑人的?
    搞懂这7个Maven问题,带你吊打面试官!
    Spring Cloud Eureka 注册安全一定要做到位!
    09 webpack的介绍
    08 node.js 的使用
    07 Node.js安装及环境配置
    06-Nodejs介绍
    05-面向对象
    Mysql 的使用方法
    04-对象的单体模式
  • 原文地址:https://www.cnblogs.com/ShaoYinling/p/4649718.html
Copyright © 2011-2022 走看看