• 关于Quartz2D方法小总结


    
    
    // oc 奇偶填充
    - (void)test11
    {
        UIBezierPath* path = [UIBezierPath bezierPathWithRect:CGRectMake(100, 100, 200, 100)];
    
        [path addArcWithCenter:CGPointMake(200, 150) radius:80 startAngle:0 endAngle:2 * M_PI clockwise:YES];
    
        path.usesEvenOddFillRule = YES;
    
        [path fill];
    }
    
    // c 奇偶填充
    - (void)test10
    {
        // 1. 获取"图形上下文"
        CGContextRef ctx = UIGraphicsGetCurrentContext();
    
        UIBezierPath* path = [UIBezierPath bezierPathWithRect:CGRectMake(100, 100, 200, 100)];
    
        UIBezierPath* path1 = [UIBezierPath bezierPathWithArcCenter:CGPointMake(200, 150) radius:80 startAngle:0 endAngle:M_PI * 2 clockwise:1];
    
        UIBezierPath* path2 = [UIBezierPath bezierPathWithRect:CGRectMake(250, 30, 20, 200)];
    
        CGContextAddPath(ctx, path2.CGPath);
        CGContextAddPath(ctx, path1.CGPath);
        CGContextAddPath(ctx, path.CGPath);
    
        // 说明: 被覆盖过奇数次的点填充, 被覆盖过偶数次的点不填充
    
        // 奇填偶不填
        CGContextDrawPath(ctx, kCGPathEOFill);
    }
    
    // c 渲染方式
    - (void)test9
    {
        // 设置渲染方式
    
        CGContextRef ctx = UIGraphicsGetCurrentContext();
    
        CGContextMoveToPoint(ctx, 50, 50);
        CGContextAddLineToPoint(ctx, 100, 100);
        CGContextAddLineToPoint(ctx, 150, 50);
    
        CGContextClosePath(ctx);
        // 渲染
        //    CGContextStrokePath(ctx); // 描边
        //    CGContextFillPath(ctx); // 填充
    
        [[UIColor redColor] setFill];
        [[UIColor blueColor] setStroke];
    
        CGContextDrawPath(ctx, kCGPathFillStroke);
    }
    
    // oc 渲染方式
    - (void)test8
    {
    
        // 路径
        UIBezierPath* path = [UIBezierPath bezierPath];
    
        // 添加路径
        [path moveToPoint:CGPointMake(50, 50)];
        [path addLineToPoint:CGPointMake(100, 100)];
        [path addLineToPoint:CGPointMake(150, 50)];
        //    [path addLineToPoint:CGPointMake(30, 30)];
    
        // 关闭路径
        [path closePath];
    
        [[UIColor redColor] setFill];
    
        [[UIColor blueColor] setStroke];
    
        // 渲染
        [path fill]; //填充
    
        [path stroke]; // 描边儿
    }
    
    // oc版本 设置样式
    - (void)test7
    {
        CGContextRef ctx = UIGraphicsGetCurrentContext();
    
        UIBezierPath* path = [UIBezierPath bezierPath];
        [path moveToPoint:CGPointMake(50, 50)];
        [path addLineToPoint:CGPointMake(100, 100)];
        [path addLineToPoint:CGPointMake(150, 50)];
    
        // 设置线宽
        [path setLineWidth:10];
    
        // 设置头尾相接处的样式
        [path setLineJoinStyle:kCGLineJoinRound];
    
        // 设置头尾的样式
        [path setLineCapStyle:kCGLineCapRound];
    
        // 设置颜色
        [[UIColor redColor] setStroke];
    
        //    [path stroke];
    
        CGContextAddPath(ctx, path.CGPath);
    
        CGContextStrokePath(ctx);
    }
    
    // c版本 设置样式
    - (void)test6
    {
        CGContextRef ctx = UIGraphicsGetCurrentContext();
    
        CGContextMoveToPoint(ctx, 50, 50);
    
        CGContextAddLineToPoint(ctx, 100, 100);
        CGContextAddLineToPoint(ctx, 150, 50);
    
        // 设置样式要在渲染之前
        CGContextSetLineWidth(ctx, 30);
    
        // 设置头尾相接的样式
        // kCGLineJoinMiter 默认
        // kCGLineJoinRound 圆角
        // kCGLineJoinBevel 切角
        CGContextSetLineJoin(ctx, kCGLineJoinBevel);
    
        // 设置头尾的样式
        // kCGLineCapRound 圆角
        // kCGLineCapButt 按照画得点来进行设置头尾
        // kCGLineCapSquare 按照画的点 + 宽度的一半
        CGContextSetLineCap(ctx, kCGLineCapButt);
    
        // 设置颜色
        [[UIColor redColor] setStroke];
    
        // 渲染
        CGContextStrokePath(ctx);
    }
    
    // 画圆环
    - (void)test5
    {
    
        // 圆环
        //    // 获取图形上下文
        //    CGContextRef ctx = UIGraphicsGetCurrentContext();
        //    // 拼接路径
        //    CGContextAddArc(ctx, 150, 150, 100, 0, 2 * M_PI, 1);
        //
        //    // 设置线宽
        //    CGContextSetLineWidth(ctx, 10);
        //
        //    // 渲染
        //    CGContextStrokePath(ctx);
    
        UIBezierPath* path = [UIBezierPath bezierPathWithArcCenter:CGPointMake(150, 150) radius:100 startAngle:0 endAngle:2 * M_PI clockwise:1];
    
        [path setLineWidth:20];
    
        [path stroke];
    }
    
    // 画圆
    - (void)test4
    {
        // 1.根据画椭圆的方法 来实现 (宽高相等)
        //    UIBezierPath* path = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(50, 50, 150, 150)];
        //
        //    [path stroke];
    
        // 2.画弧
    
        //        UIBezierPath* path = [UIBezierPath bezierPathWithArcCenter:CGPointMake(150, 150) radius:100 startAngle:M_PI_4 endAngle:M_PI_2 clockwise:YES];
        //
        //        [path stroke];
    
        CGContextRef ctx = UIGraphicsGetCurrentContext();
        CGContextAddArc(ctx, 150, 150, 100, M_PI_4, M_PI_2, 1);
        CGContextStrokePath(ctx);
    }
    
    // 椭圆
    - (void)test3
    {
        //    UIBezierPath* path = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(50, 50, 100, 200)];
        //
        //    [path stroke];
    
        // 获取图形上下文
        CGContextRef ctx = UIGraphicsGetCurrentContext();
    
        // 画椭圆
        CGContextAddEllipseInRect(ctx, CGRectMake(50, 50, 200, 100));
    
        // 渲染
        CGContextStrokePath(ctx);
    }
    
    // 圆角矩形(也可以画圆)
    - (void)test2
    {
        // cornerRadius 圆角半径 如果你参数比这个正常要大  直接就是圆
        UIBezierPath* path = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(100, 100, 100, 100) cornerRadius:50];
        [path stroke];
    }
    
    // 矩形
    - (void)test1
    {
        UIBezierPath* path = [UIBezierPath bezierPathWithRect:CGRectMake(100, 100, 100, 200)];
        [path stroke];
    }
    
    
    
    //给图片打水印代码
    
        UIImage *bgImage = [UIImage imageNamed:@"图片名称"];
        
        // 上下文 : 基于位图(bitmap) ,  所有的东西需要绘制到一张新的图片上去
        
        // 1.创建一个基于位图的上下文(开启一个基于位图的上下文)
        // size : 新图片的尺寸
        // opaque : YES : 不透明,  NO : 透明
        // 这行代码过后.就相当于常见一张新的bitmap,也就是新的UIImage对象
        UIGraphicsBeginImageContextWithOptions(bgImage.size, NO, 0.0);
        
        // 2.画背景
        [bgImage drawInRect:CGRectMake(0, 0, bgImage.size.width, bgImage.size.height)];
        
        // 3.画右下角的水印
        UIImage *waterImage = [UIImage imageNamed:@"水印名称"];
        CGFloat scale = 0.2;
        CGFloat margin = 5;
        CGFloat waterW = waterImage.size.width * scale;
        CGFloat waterH = waterImage.size.height * scale;
        CGFloat waterX = bgImage.size.width - waterW - margin;
        CGFloat waterY = bgImage.size.height - waterH - margin;
        [waterImage drawInRect:CGRectMake(waterX, waterY, waterW, waterH)];
        
        // 4.从上下文中取得制作完毕的UIImage对象
        UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
        
        // 5.结束上下文
        UIGraphicsEndImageContext();
        
        // 6.显示到UIImageView
        self.iconView.image = newImage;
        
        // 7.将image对象压缩为PNG格式的二进制数据
        NSData *data = UIImagePNGRepresentation(newImage);
        //    UIImageJPEGRepresentation(<#UIImage *image#>, <#CGFloat compressionQuality#>)
        
        // 8.写入文件
        NSString *path = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"new.png"];
        [data writeToFile:path atomically:YES];

        以下是关于Quartz2D的一些方法的小总结,希望能帮的上你,直接上代码,代码中已经清标注了注释:

    //裁剪图片
    - (void)Clip{
        CGContextRef ctx = UIGraphicsGetCurrentContext();
        
        // 0.画圆
        CGContextAddEllipseInRect(ctx, CGRectMake(100, 100, 50, 50));
        // 裁剪
        CGContextClip(ctx);
        CGContextFillPath(ctx);
        
        // 1.显示图片
        UIImage *image = [UIImage imageNamed:@"me"];
        [image drawAtPoint:CGPointMake(100, 100)];
     }
    
    //图形上下文栈
    - (void)zhan{
        
        // 1.获得上下文
        CGContextRef ctx = UIGraphicsGetCurrentContext();
        
        // 将ctx拷贝一份放到栈中
        CGContextSaveGState(ctx);
        
        // 设置绘图状态
        CGContextSetLineWidth(ctx, 10);
        [[UIColor redColor] set];
        CGContextSetLineCap(ctx, kCGLineCapRound);
        
        // 第1根线
        CGContextMoveToPoint(ctx, 50, 50);
        CGContextAddLineToPoint(ctx, 120, 190);
        
        CGContextStrokePath(ctx);
        
        // 将栈顶的上下文出栈,替换当前的上下文
        CGContextRestoreGState(ctx);
        
        
        // 第2根线
        CGContextMoveToPoint(ctx, 10, 70);
        CGContextAddLineToPoint(ctx, 220, 290);
        
        CGContextStrokePath(ctx);
        //    CGContextDrawPath(ctx, kCGPathStroke);
    
    }
    
    //画图片
    - (void)img{
        //得到图片
        UIImage *img = [UIImage imageNamed:@"图片名称"];
        
        //绘制图片
        //1.以这个点为图片左上角的点
        //[img drawAtPoint:CGPointMake(20, 20)];
        //2.以这个范围拉伸图片
        //[img drawInRect:CGRectMake(0, 0, 50, 50)];
        //3.在这个范围内平铺图片(图片自己尺寸不变)
        [img drawAsPatternInRect:CGRectMake(0, 0, 100, 100)];
    
    }
    
    //画文字
    - (void)word{
        
        //绘制文字(不用开启图形上下文)
        NSString *str = @"kwf哈wgkwg哈";
        CGRect wordRect = CGRectMake(20, 20, 100, 50);
        //给要显示的文字设置一个范围
        //NSForegroundColorAttributeName:文字颜色
        //NSFontAttributeName : 字体
        NSMutableDictionary *dict = [NSMutableDictionary dictionary];
        //设置字体颜色
        dict[NSForegroundColorAttributeName] = [UIColor greenColor];
        //设置字体大小
        dict[NSFontAttributeName] = [UIFont systemFontOfSize:20];
        [str drawInRect:wordRect withAttributes:dict];
        
    }
    
    //画弧
    void huxing(){
        
        //开启一个图形上下文
        CGContextRef ctx = UIGraphicsGetCurrentContext();
        //画弧
        /**
         *  20:圆心X值
         *  20:圆心Y值
         *  30:半径
         *  0:起始角度
         *  M_PI_2:结束角度
         *  0:顺时针方向 1:逆时针方向
         */
        CGContextAddArc(ctx, 20, 20, 30, 0, M_PI_2, 0);    //设置线条宽度
        CGContextSetLineWidth(ctx, 5);
        //渲染并显示到view上(实心)
        CGContextStrokePath(ctx);
    
    }
    
    //画圆
    void yuan(){
        //开启一个图形上下文
        CGContextRef ctx = UIGraphicsGetCurrentContext();
        //画圆
        CGContextAddEllipseInRect(ctx, CGRectMake(20, 20, 50, 50));
        //设置线条宽度
        CGContextSetLineWidth(ctx, 5);
        //渲染并显示到view上(实心)
        CGContextStrokePath(ctx);
    
    }
    
    //实心矩形
    void juxings(){
        //开启一个图形上下文
        CGContextRef ctx = UIGraphicsGetCurrentContext();
        //画矩形
        CGContextAddRect(ctx, CGRectMake(10, 10, 90, 90));
        //渲染并显示到view上(实心)
        CGContextFillPath(ctx);
    }
    //空心矩形
    void juxingk(){
        //开启一个图形上下文
        CGContextRef ctx = UIGraphicsGetCurrentContext();
        //画矩形
        CGContextAddRect(ctx, CGRectMake(10, 10, 90, 90));
        
        //设置线条宽度
        CGContextSetLineWidth(ctx, 10);
        
        //设置线条颜色(空心:也就是设置线条颜色)
        CGContextSetRGBStrokeColor(ctx, 1, 0, 0, 1);
        
        //设置图形颜色(实心:也就是填充色)
        CGContextSetRGBFillColor(ctx, 1, 0, 0, 1);
        
        //设置空心,实心通用的方法
        [[UIColor blueColor]set];
        
        //设置线段头尾部样式
        CGContextSetLineCap(ctx, kCGLineCapRound);
        
        //设置线段转折点样式
        CGContextSetLineJoin(ctx, kCGLineJoinRound);
        
        //渲染并显示到view上
        CGContextStrokePath(ctx);
    
    }
    
    //空心三角形
    void sanjiaoxing(){
        //开启一个图形上下文
        CGContextRef ctx = UIGraphicsGetCurrentContext();
        //设置一个起点
        CGContextMoveToPoint(ctx, 10, 10);
        //添加一条线的另一个点
        CGContextAddLineToPoint(ctx, 50, 50);
        //再添加一个点
        CGContextAddLineToPoint(ctx, 10, 50);
        //关闭路径
        CGContextClosePath(ctx);
        //渲染并显示到view上
        CGContextStrokePath(ctx);
    
    }
    
    //一条线
    void xian(){
        
        //开启一个图形上下文
        CGContextRef ctx = UIGraphicsGetCurrentContext();
        //设置一个起点
        CGContextMoveToPoint(ctx, 10, 10);
        //设置一个
        CGContextAddLineToPoint(ctx, 50, 50);
        //渲染并显示到view上
        CGContextStrokePath(ctx);
    
    }
    //重绘(也就是会调用setNeedsDisplay这个方法)
    [self setNeedsDisplay];
    //截取整个屏幕的画面(截屏)
    + (instancetype)captureWithView:(UIView *)view
    {
        // 1.开启上下文
        UIGraphicsBeginImageContextWithOptions(view.frame.size, NO, 0.0);
        
        // 2.将控制器view的layer渲染到上下文
        [view.layer renderInContext:UIGraphicsGetCurrentContext()];
        
        // 3.取出图片
        UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
        
        // 4.结束上下文
        UIGraphicsEndImageContext();
        
        return newImage;
    }
    //给view设置自定义的背影
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        
    //    self.view.backgroundColor = [UIColor redColor];
        
        // 1.创建一行背景图片
        CGFloat rowW = self.view.frame.size.width;
    //    CGFloat rowH = 40;
        CGFloat rowH = 30;
        UIGraphicsBeginImageContextWithOptions(CGSizeMake(rowW, rowH), NO, 0.0);
        
        CGContextRef ctx = UIGraphicsGetCurrentContext();
        // 画矩形框
        [[UIColor redColor] set];
        CGContextAddRect(ctx, CGRectMake(0, 0, rowW, rowH));
        CGContextFillPath(ctx);
        
        // 2.画线
        [[UIColor greenColor] set];
        CGFloat lineWidth = 2;
        CGContextSetLineWidth(ctx, lineWidth);
        CGFloat dividerX = 0;
        CGFloat dividerY = rowH - lineWidth;
        CGContextMoveToPoint(ctx, dividerX, dividerY);
        CGContextAddLineToPoint(ctx, rowW - dividerX, dividerY);
        CGContextStrokePath(ctx);
        
        // 3.取图
        UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
        
        // 4.结束上下文
        UIGraphicsEndImageContext();
        
        // 5.设置为背景
        self.textView.backgroundColor = [UIColor colorWithPatternImage:newImage];
    }
    全身心修练iOS
  • 相关阅读:
    [HNOI2014]江南乐
    烦人的数学作业(数位dp)
    http2.0请求springboot接口
    01背包动态规划
    坑点总结
    [机房测试] 堆石子
    [机房测试] 出租车
    [机房测试] 下棋
    [机房测试] number
    [CSP-S2019] 树的重心
  • 原文地址:https://www.cnblogs.com/ZMiOS/p/4872854.html
Copyright © 2020-2023  润新知