美文网首页
iOS日常基础记录13

iOS日常基础记录13

作者: 恋空K | 来源:发表于2022-11-03 19:01 被阅读0次



    - (void)drawLine {
        //1.获取当前跟View相关联的上下文
        CGContextRef ctx = UIGraphicsGetCurrentContext();
        //2.描述路径
        UIBezierPath *path = [UIBezierPath bezierPath];
        //一个路径可以描述多条线/
        //2.1设置起点
        //坐标原点是以当前绘制View的左上角为(0,0)
        [path moveToPoint:CGPointMake(50, 50)];
        //2.2添加一根线到某个点
        [path addLineToPoint:CGPointMake(150, 150)];
        
        [path moveToPoint:CGPointMake(100, 50)];
        [path addLineToPoint:CGPointMake(150, 250)];
        
        //把上一路径的终点做为下一个路径的起点
        [path addLineToPoint:CGPointMake(250, 50)];
        
        //设置上下文的状态
        //设置线宽度
        CGContextSetLineWidth(ctx, 10);
        //设置上下文的连接样式
        CGContextSetLineJoin(ctx, kCGLineJoinBevel);
        //设置顶角样式
        CGContextSetLineCap(ctx, kCGLineCapRound);
        
        //设置线的颜色
        //setStroke setFill
        //如果直接使用set,会自动匹配渲染的模式.
        [[UIColor redColor] set];
        
        //3.把路径添加到上下文
        CGContextAddPath(ctx, path.CGPath);
        
        //4.把上下文的当中绘制的所有路径渲染View相关联的layer当中.
        //渲染的方式有两种:
        //描边:stroke
        //填充:fill
        CGContextStrokePath(ctx);
    }
    
    - (void)quadCurveLine {
        //1.获取上下文
        CGContextRef ctx = UIGraphicsGetCurrentContext();
        //2.描述路径
        UIBezierPath *path = [UIBezierPath bezierPath];
        //画曲线
        [path moveToPoint:CGPointMake(50, 250)];
        //添加一根曲线到某个点
        [path addQuadCurveToPoint:CGPointMake(250, 250) controlPoint:CGPointMake(50, 50)];
        //3.把路径添加到上下文
        CGContextAddPath(ctx, path.CGPath);
        //4.把上下文的内容渲染到View的layer;
        CGContextStrokePath(ctx);
    }
    
    - (void)drawShape {
        //在此方法内部会自动创建 一个跟View相关联的上下文
        //可以直接获取
        //无论是开启上下文,还是获取上下文,都是以UIGraphics
        
        //1.获取上下文
        CGContextRef ctx = UIGraphicsGetCurrentContext();
        //2.描述路径
        //UIBezierPath *path = [UIBezierPath bezierPathWithRect:CGRectMake(50, 50, 200, 100)];
        //描述圆角矩形
        //cornerRadius:圆角半径
        //UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(50, 50, 200, 200) cornerRadius:100];
        
        //描述椭圆
        UIBezierPath *path = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(50, 50, 200, 200)];
        //3.把路径添加到上下文
        CGContextAddPath(ctx, path.CGPath);
        
        //设置上下文的状态,必须得要在渲染之前设置.
        [[UIColor yellowColor] set];
        
        //4.把上下文的内容渲染到View的layer;
        //CGContextStrokePath(ctx);
        //填充
        CGContextFillPath(ctx);
        
        //画椭圆
        //  只要是往Veiw上面画东西,必须得要在drawRect当中进行
        //UIBezierPath *path = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(50, 50, 200, 200)];
        
        //[[UIColor redColor] set];
        //[path stroke];
    }
    
    平时我们设置的圆角半径,就是图中两点之间的距离
    //作用:专门用来绘图
    //什么时候调用:当View显示时调用
    //参数:当前View的bounds
    - (void)drawRect:(CGRect)rect {
        //画弧
        //Center:弧所在圆的圆心
        //radius:弧所在圆的半径
        //startAngle:开始角度 ;0度是在圆的最右侧,向上,度数是负的,向下,度数是正的.
        //endAngle:截至角度  (哪个位置)
        //clockwise:是否为顺时针 (怎么样到这个位置)
        CGPoint center = CGPointMake(rect.size.width * 0.5, rect.size.height * 0.5);
        CGFloat radius = rect.size.width * 0.5 - 10;
        UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:center 
        radius:radius startAngle:0 endAngle:-M_PI_2 clockwise:NO];
        
        //添加一根线到圆心
        [path addLineToPoint:center];
        //关闭路径(从路径的终点连接一根到到路径的起点)
        //[path closePath];
        
        [path fill]; //当使用填充时,会自动关闭路径
        //1.获取上下文->2.描述路径->3.把路径添加到上下文->4.把上下文的内容渲染到View的layer;
    }
    
    绘制下载进度条
    #import "ProgressView.h"
    
    @implementation ProgressView
    
    - (void)setProgressValue:(CGFloat)progressValue {
        _progressValue = progressValue;
        //[self drawRect:self.bounds];
        //当系统调用drawRect方法时 在drawRect:内部会自动创建跟View相关联的上下文
        //手动调用,是不会创建上下文.
        
        //通知系统,调用drawRect
        //重绘,就是调用drawRect,重新绘制
        [self setNeedsDisplay];
    }
    
    
    - (void)drawRect:(CGRect)rect {
        // Drawing code
        CGPoint center = CGPointMake(rect.size.width * 0.5, rect.size.height * 0.5);
        CGFloat radius = rect.size.width * 0.5 - 10;
        CGFloat startA = -M_PI_2;
        CGFloat endA = startA + self.progressValue * M_PI * 2;
        
        //1.获取跟View相关联的上下文
        CGContextRef ctx = UIGraphicsGetCurrentContext();
        //2.描述路径
          UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:center radius:radius startAngle:startA endAngle:endA clockwise:YES];
        
        [path addLineToPoint:center];
        
        //3.把路径添加到上下文
        CGContextAddPath(ctx, path.CGPath);
        
        [[UIColor colorWithWhite:1 alpha:0.5] set];
        
        //4.把上下文的内容渲染的View上
        CGContextFillPath(ctx);
    }
    

    相关文章

      网友评论

          本文标题:iOS日常基础记录13

          本文链接:https://www.haomeiwen.com/subject/gjphtdtx.html