通过对ios开发ui篇的学习 总结了drawrect的方法和使用

新建一个项目,自定义一个view类和storyboard关联后,重写该类中的drowrect方法。
画线的三个步骤:
(1)获取上下文
(2)绘图
(3)渲染

画直线代码:

- (void)drawRect:(CGRect)rect
{//获取上下文CGContextRef ctx=UIGraphicsGetCurrentContext();//绘图//第一条线CGContextMoveToPoint(ctx, 20, 100);CGContextAddLineToPoint(ctx, 100, 320);//第二条线CGContextMoveToPoint(ctx, 40, 200);CGContextAddLineToPoint(ctx, 80, 100);//渲染CGContextStrokePath(ctx);}

带颜色的直线代码:

- (void)drawRect:(CGRect)rect
{//获取上下文CGContextRef ctx=UIGraphicsGetCurrentContext();//绘图//第一条线CGContextMoveToPoint(ctx, 20, 100);CGContextAddLineToPoint(ctx, 100, 320);//设置第一条线的状态//设置线条的宽度CGContextSetLineWidth(ctx, 12);//设置线条的颜色[[UIColor brownColor]set];//设置线条两端的样式为圆角CGContextSetLineCap(ctx,kCGLineCapRound);//对线条进行渲染CGContextStrokePath(ctx);//第二条线CGContextMoveToPoint(ctx, 40, 200);CGContextAddLineToPoint(ctx, 80, 100);//渲染CGContextStrokePath(ctx);}

一条带颜色,一条为原始的代码:方法一

- (void)drawRect:(CGRect)rect
{//获取上下文CGContextRef ctx=UIGraphicsGetCurrentContext();//绘图//第一条线CGContextMoveToPoint(ctx, 20, 100);CGContextAddLineToPoint(ctx, 100, 320);//设置第一条线的状态//设置线条的宽度CGContextSetLineWidth(ctx, 12);//设置线条的颜色[[UIColor brownColor]set];//设置线条两端的样式为圆角CGContextSetLineCap(ctx,kCGLineCapRound);//对线条进行渲染CGContextStrokePath(ctx);//第二条线CGContextMoveToPoint(ctx, 40, 200);CGContextAddLineToPoint(ctx, 80, 100);//清空状态CGContextSetLineWidth(ctx, 1);[[UIColor blackColor]set];CGContextSetLineCap(ctx,kCGLineCapButt);//渲染CGContextStrokePath(ctx);}

方法二:

- (void)drawRect:(CGRect)rect
{//获取上下文CGContextRef ctx=UIGraphicsGetCurrentContext();//绘图//第二条线CGContextMoveToPoint(ctx, 40, 200);CGContextAddLineToPoint(ctx, 80, 100);//清空状态//    CGContextSetLineWidth(ctx, 1);//    [[UIColor blackColor]set];//    CGContextSetLineCap(ctx,kCGLineCapButt);//渲染CGContextStrokePath(ctx);//第一条线CGContextMoveToPoint(ctx, 20, 100);CGContextAddLineToPoint(ctx, 100, 320);//设置第一条线的状态//设置线条的宽度CGContextSetLineWidth(ctx, 12);//设置线条的颜色[[UIColor brownColor]set];//设置线条两端的样式为圆角CGContextSetLineCap(ctx,kCGLineCapRound);//对线条进行渲染CGContextStrokePath(ctx);
}

画四边形代码:

- (void)drawRect:(CGRect)rect
{//画四边形//获取图形上下文CGContextRef ctx=UIGraphicsGetCurrentContext();//绘图CGContextAddRect(ctx, CGRectMake(20, 50, 100, 100));//渲染CGContextStrokePath(ctx);
}

画一个歪的四边形:

- (void)drawRect:(CGRect)rect
{//画四边形//获取图形上下文CGContextRef ctx=UIGraphicsGetCurrentContext();//矩阵操作//注意点:设置矩阵操作必须要在添加绘图信息之前//旋转45度CGContextRotateCTM(ctx, M_PI_4);//绘图CGContextAddRect(ctx, CGRectMake(150, 100, 100, 100));//渲染CGContextStrokePath(ctx);
}

画一个圆代码以及旋转代码:

- (void)drawRect:(CGRect)rect
{
    //获取图形上下文
    CGContextRef ctx=UIGraphicsGetCurrentContext();
    //矩阵操作
    //注意点:设置矩阵操作必须要在添加绘图信息之前
    //旋转45度
    //    CGContextRotateCTM(ctx, M_PI_4);
    
    //绘图
    //画四边形
    CGContextAddRect(ctx, CGRectMake(150, 100, 100, 100));
    //画一个圆
    CGContextAddEllipseInRect(ctx, CGRectMake(200, 200, 50, 50));
    //渲染
    CGContextStrokePath(ctx);
}

旋转代码:

- (void)drawRect:(CGRect)rect
{//获取图形上下文CGContextRef ctx=UIGraphicsGetCurrentContext();//矩阵操作//注意点:设置矩阵操作必须要在添加绘图信息之前//旋转45度CGContextRotateCTM(ctx, M_PI_4);//绘图//画四边形CGContextAddRect(ctx, CGRectMake(150, 100, 100, 100));//画一个圆CGContextAddEllipseInRect(ctx, CGRectMake(200, 200, 50, 50));//渲染CGContextStrokePath(ctx);
}

缩放代码:

- (void)drawRect:(CGRect)rect
{//获取图形上下文CGContextRef ctx=UIGraphicsGetCurrentContext();//矩阵操作//注意点:设置矩阵操作必须要在添加绘图信息之前//缩放,x方向缩放0.5倍,y方向缩放1.5倍CGContextScaleCTM(ctx, 0.5, 1.5);//绘图//画四边形CGContextAddRect(ctx, CGRectMake(150, 100, 100, 100));//画一个圆CGContextAddEllipseInRect(ctx, CGRectMake(200, 200, 50, 50));//渲染CGContextStrokePath(ctx);
}

平移代码:

- (void)drawRect:(CGRect)rect
{//获取图形上下文CGContextRef ctx=UIGraphicsGetCurrentContext();//矩阵操作//注意点:设置矩阵操作必须要在添加绘图信息之前//平移,x方向移动50,y方向移动100CGContextTranslateCTM(ctx, 50, 100);//绘图//画四边形CGContextAddRect(ctx, CGRectMake(150, 100, 100, 100));//画一个圆CGContextAddEllipseInRect(ctx, CGRectMake(200, 200, 50, 50));//渲染CGContextStrokePath(ctx);
}

画一个圆形头像代码:

- (void)drawRect:(CGRect)rect
{//画圆,以便以后指定可以显示图片的范围//获取图形上下文CGContextRef ctx=UIGraphicsGetCurrentContext();CGContextAddEllipseInRect(ctx, CGRectMake(100, 100, 50, 50));//指定上下文中可以显示内容的范围就是圆的范围CGContextClip(ctx);UIImage *image2=[UIImage imageNamed:@"me"];[image2 drawAtPoint:CGPointMake(100, 100)];
}

画一个三角形头像:

- (void)drawRect:(CGRect)rect
{//画三角形,以便以后指定可以显示图片的范围//获取图形上下文CGContextRef ctx=UIGraphicsGetCurrentContext();
//    CGContextAddEllipseInRect(ctx, CGRectMake(100, 100, 50, 50));CGContextMoveToPoint(ctx, 100, 100);CGContextAddLineToPoint(ctx, 60, 150);CGContextAddLineToPoint(ctx, 140, 150);CGContextClosePath(ctx);//注意:指定范围(也就是指定剪切的方法一定要在绘制范围之前进行调用)//指定上下文中可以显示内容的范围就是圆的范围CGContextClip(ctx);UIImage *image2=[UIImage imageNamed:@"me"];[image2 drawAtPoint:CGPointMake(100, 100)];
}

drawrect的使用相关推荐

  1. 绘图中的drawRect

    rect参数:代表的是当前view的bounds 1 为什么要在drawRect方法里面写绘图代码 因为只有在这个方法中才能获取到当前view相关的图形上下文对象 有了这个图形上写文对象后才能进行绘图 ...

  2. Phone重绘机制drawRect 转

    Phone重绘机制drawRect 如何使用iPhone进行绘图.重绘操作 iPhone的绘图操作是在UIView类的drawRect方法中完成的,所以如果我们要想在一个UIView中绘图,需要写一个 ...

  3. UIView的layoutSubviews和drawRect方法何时调用

    UIView的layoutSubviews和drawRect方法何时调用   转自:http://jianyu996.blog.163.com/blog/static/1121145552013051 ...

  4. drawrect java_对于drawRect使用,谨慎使用!

    #1.drawRect简介 drawRect方法在UIView的使用上起着十分关键的作用.不知道大家注意过没有,每一次创建UIView子类文件时候,会有自动带有已注释的drawRect方法,也许从这一 ...

  5. iOS重绘机制drawRect

    iOS的绘图操作是在UIView类的drawRect方法中完成的,所以如果我们要想在一个UIView中绘图,需要写一个扩展UIView 的类,并重写drawRect方法,在这里进行绘图操作,程序会自动 ...

  6. 内存恶鬼drawRect

    转载于:http://bihongbo.com/       内存恶鬼drawRect 标题有点吓人,但是对于drawRect的评价倒是一点都不过分.在平日的开发中,随意覆盖drawRect方法,稍有 ...

  7. iOS学习:CAShapeLayer与DrawRect对比,与UIBezierPath画图形

    使用CAShapeLayer有以下一些优点 渲染快速.CAShapeLayer使用了硬件加速,绘制同一图形会比用Core Graphics快很多. 高效使用内存.一个CAShapeLayer不需要像普 ...

  8. 内存恶鬼drawRect - 谈画图功能的内存优化

    2019独角兽企业重金招聘Python工程师标准>>> 标题有点吓人,但是对于drawRect的评价倒是一点都不过分.在平日的开发中,随意覆盖drawRect方法,稍有不慎就会让你的 ...

  9. layoutSubviews 与 drawRect

    layoutSubviews在以下情况下会被调用: 1.init初始化不会触发layoutSubviews. 2.addSubview会触发layoutSubviews. 3.设置view的Frame ...

  10. UIView的layoutSubviews和drawRect

    本文转载至 http://my.oschina.net/megan/blog/143027 UIView的setNeedsDisplay和setNeedsLayout方法.首先两个方法都是异步执行的. ...

最新文章

  1. 对Transformer、XLNet、 ALBERT、 CRF等技术仍然一知半解?再不学习就OUT了!
  2. unix mysql_Unix和Mysql中列出的数据库大小之间存在差异
  3. 3.7 非极大值抑制-深度学习第四课《卷积神经网络》-Stanford吴恩达教授
  4. linux type命令(用来显示指定命令的类型,判断给出的指令是内部指令还是外部指令,如果给出的指令为外部指令,则显示其绝对路径)
  5. c# 多线程 执行事件 并发_C#.NET Thread多线程并发编程学习与常见面试题解析-1、Thread使用与控制基础...
  6. go的timer定时器实现
  7. Jetbrains 系 IDE 编辑器的代码提示功能
  8. python登录验证程序_python – 测试Flask登录和身份验证?
  9. JS:ES6-2 const 关键字
  10. mysql的设计模式_数据库设计中使用设计模式
  11. localhost提示没有入口_管家婆财贸双全连接失败,服务器端没有找到加密狗
  12. linux越狱时手机怎么进入dfu,通过软件恢复进入DFU刷机模式教程
  13. matlab飞机降落过程模拟,scratch作品 “模拟飞机降落”---东风东路小学一年(14)班 沈宸玮...
  14. 记录一个找直线三等分点的方法及其证明
  15. javase哪部分最难_JavaSe到底有多重要?
  16. 分析样布/面料的七个口诀
  17. 手把手第一篇:写出第一行 Hello World
  18. 分布式唯一ID几种生成方案
  19. Nvme驱动补丁 解决Usb3.0/3.1驱动和磁盘控制器WIN7蓝屏方案
  20. 小程序之 一个方法中的值怎么传递到另一个方法中

热门文章

  1. golang goroutine实现_Golang 的 goroutine 是如何实现的?
  2. 计算机的利弊优秀英语范文,2017下半年大学英语六级作文范文:电脑利弊
  3. Netty快速入门与Reactor模式
  4. Mobaxterm常用指令集
  5. 连接机器打造智能工厂?请看虹科ASEM UNIQO解决方案!
  6. 【应用统计学】分布的偏度和峰度
  7. 《sklearn机器学习第二版》(加文海克著)学习笔记
  8. 详解URL(为后续写Ajax做准备)
  9. 【数据说】微信更深,QQ更宽
  10. 【C#】WixToolset快速入门教程