笔记: UI - 画图

本文详细介绍iOS平台上的图形绘制方法,包括使用CG画图法绘制基本图形、利用UIBezierPath实现自定义图形绘制、自由画线功能实现及绘制文字和图片等。通过具体实例介绍了不同图形的绘制过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


(1). CG画图

/**   CG画图法   **/

- (void)drawRect:(CGRect)rect{

    //准备画笔

    CGContextRef  pen = UIGraphicsGetCurrentContext();

    //落笔(落笔点)    参数:笔,x坐标,y坐标

    CGContextMoveToPoint(pen, 40, 40);

    

    //画横线  (给定右坐标,画笔自动连线)

    CGContextAddLineToPoint(pen, 80, 40);

    //画左下划

    CGContextAddLineToPoint(pen, 60, 70);

    //左上提 (三角形)回到原点

    CGContextAddLineToPoint(pen, 40, 40);

    

    //设置描边颜色 stroke

    CGContextSetStrokeColorWithColor(pen, [UIColor blueColor].CGColor);

    //开始描边

//    CGContextStrokePath(pen);

    //设置填充颜色 fill

    CGContextSetFillColorWithColor(pen, [UIColor orangeColor].CGColor);

    //填充颜色

//    CGContextFillPath(pen);


    //此处注意:因为描边和填充不能同时上色,如果要同时使用,用下面方法

    CGContextDrawPath(pen, kCGPathFillStroke);

}


(2)UIBeZierPath  (贝塞尔路径 封装类)

可以按照面向对象的方式绘制图形,如:圆形,扇形,椭圆,矩形,多边形等等。


1.  自定义图形

     /** UIBezierPath 贝塞尔路径封装类  自定义图形  */

    //画笔

    UIBezierPath *path = [UIBezierPath bezierPath];

    //移动画笔到起点

    [path moveToPoint:CGPointMake(120, 120)];

    

    //画线

    [path addLineToPoint:CGPointMake(200, 120)];

    [path addLineToPoint:CGPointMake(160, 180)];

    [path addLineToPoint:CGPointMake(120, 120)];

    

    //设置边线宽度

    path.lineWidth = 3;

    //设置边线连接处样式 (kCGLineJoinBevel 尖角)

    path.lineJoinStyle = kCGLineJoinRound;

    //设置线头样式(起点和终点连接处)

    path.lineCapStyle = kCGLineCapButt;

    

    //设置描边颜色

    [[UIColor blueColor] setStroke];

    //开始描边

    [path stroke];

    //设置填充颜色

    [[UIColor orangeColor] setFill];

    //开始填充

    [path fill];

  2.  /** UIBezierPath 贝塞尔路径封装类  系统图形  */


    /* 圆形   扇形          π = 180

     参数:center:圆心    radiu:半径   startAngle:起始弧度 M_PI_2  π/2

     endAngle:终止弧度    clockwise:是否顺时针     */

    UIBezierPath *circlepath = [UIBezierPath bezierPathWithArcCenter: CGPointMake(160, 200radius:80 startAngle:0  endAngle:M_PI * 2   clockwise:YES];


    [customRoundPath closePath]; //停止画图



/* 矩形 */

    UIBezierPath * rectpath = [UIBezierPath bezierPathWithRect:CGRectMake(150, 40, 100, 50)];

[customRoundPath closePath]; //停止画图

    


    /* 椭圆 */

    UIBezierPath *ovalpath = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(160, 45, 80, 40)];

    [customRoundPath closePath]; //停止画图

    


    /* 圆角矩形 */

    UIBezierPath *roundRectPath = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(100, 300, 100, 70) cornerRadius:10];

   [customRoundPath closePath]; //停止画图



 /*  定制圆角矩形 */

    /* byRoundingCorners:修改那个角   cornerRadii:圆角弧度 */

    UIBezierPath *customRoundPath = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(10, 300, 80, 50) byRoundingCorners:UIRectCornerBottomLeft|UIRectCornerTopRight  cornerRadii:CGSizeMake(20, 8)];

[customRoundPath closePath]; //停止画图




  /* 贝塞尔 曲线  - 牵引拉曲 */

   /* 先画线,再设置牵引力  */

    UIBezierPath *curvePath = [UIBezierPath bezierPath];  //画笔

    [curvePath moveToPoint:CGPointMake(10, 20)];  //落笔点

//贝塞尔曲线 参数1:线的重点   point1:牵引中心1  

    [curvePath addCurveToPoint:CGPointMake(80, 200) controlPoint1:CGPointMake(70, 40) controlPoint2:CGPointMake(0, 160)];

[customRoundPath closePath]; //停止画图



    //设置描边颜色

    [[UIColor blueColor] setStroke];

    //开始描边

    [path stroke];

    //设置填充颜色

    [[UIColor orangeColor] setFill];

    //开始填充

    [path fill];



(3)自由画线

1. 在MyView.h 文件中声明 画笔属性

@property(nonatomic) UIBezierPath *path;

2. 首先首先懒加载 画笔path

-(UIBezierPath *)path{

    if (_path == nil) {

        // 获取画笔

         _path = [UIBezierPath bezierPath];

    }

    return _path;

}

3.重写drawRect 方法,设置 画笔颜色,线宽(注意这一步很重要)

- (void)drawRect:(CGRect)rect{

//设置描边颜色

    [[UIColor blueColor] setStroke];

    //开始描边

    [self.path stroke];

    //设置边线宽度

    self.path.lineWidth = 3;

}

4. 监听手指触屏事件,获取起点

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{

    //获取手指 Touch

    UITouch *touch = touches.anyObject;

    //获取手指位置

    CGPoint p = [touch locationInView:self];

    //把画笔 移动到这个位置

    [self.path moveToPoint:p];

}

5. 监听手指移动事件,开始连线

- (void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{

    //获取手指 Touch

    UITouch *touch = touches.anyObject;

    //获取手指位置

    CGPoint p = [touch locationInView:self];

    //连线

    [self.path addLineToPoint:p];

    //刷新页面,调用setNeedsDisplay方法(该方法自动调用drawRect方法)

    [self setNeedsDisplay];

}


(4)绘制文字  


(5) 绘制图片  TRImageView

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值