iOS日常基础记录13

2022-11-03  本文已影响0人  恋空K



- (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);
}
上一篇下一篇

猜你喜欢

热点阅读