Phone重绘机制drawRect

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

下面先说明一下绘图,比如,你想绘制一个方块,你需要写一个类来扩展UIView并在drawRect方法中填入如下代码:

- (void)drawRect:(CGRect)rect {  
    // Drawing code.  
    //获得处理的上下文    
    CGContextRef context = UIGraphicsGetCurrentContext();    
    //设置线条样式    
    CGContextSetLineCap(context, kCGLineCapSquare);     
    //设置线条粗细宽度    
    CGContextSetLineWidth(context, 1.0);     
    
    //设置颜色    
    CGContextSetRGBStrokeColor(context, 1.0, 0.0, 0.0, 1.0);     
    //开始一个起始路径    
    CGContextBeginPath(context);     
    //起始点设置为(0,0):注意这是上下文对应区域中的相对坐标,    
    CGContextMoveToPoint(context, 0, 0);     
    //设置下一个坐标点    
    CGContextAddLineToPoint(context, 100, 100);     
    //设置下一个坐标点    
    CGContextAddLineToPoint(context, 0, 150);    
    //设置下一个坐标点    
    CGContextAddLineToPoint(context, 50, 180);    
    //连接上面定义的坐标点    
    CGContextStrokePath(context);  
      
}

再说明一下重绘,重绘操作仍然在drawRect方法中完成,但是苹果不建议直接调用drawRect方法,当然如果你强直直接调用此方法,当然是没有效果的。苹果要求我们调用UIView类中的setNeedsDisplay方法,则程序会自动调用drawRect方法进行重绘。(调用setNeedsDisplay会自动调用drawRect)

在UIView中,重写drawRect: (CGRect) aRect方法,可以自己定义想要画的图案.且此方法一般情况下只会画一次.也就是说这个drawRect方法一般情况下只会被掉用一次. 
当某些情况下想要手动重画这个View,只需要掉用[self setNeedsDisplay]方法即可.
drawRect掉用是在Controller->loadView, Controller->viewDidLoad 两方法之后掉用的.所以不用担心在控制器中,这些View的drawRect就开始画了.这样可以在控制器中设置一些值给View(如果这些View draw的时候需要用到某些变量值).

1.如果在UIView初始化时没有设置rect大小,将直接导致drawRect不被自动调用。
2.该方法在调用sizeThatFits后被调用,所以可以先调用sizeToFit计算出size。然后系统自动调用drawRect:方法。
3.通过设置contentMode属性值为UIViewContentModeRedraw。那么将在每次设置或更改frame的时候自动调用drawRect:。
4.直接调用setNeedsDisplay,或者setNeedsDisplayInRect:触发drawRect:,但是有个前提条件是rect不能为0.
以上1,2推荐;而3,4不提倡

1、若使用UIView绘图,只能在drawRect:方法中获取相应的contextRef并绘图。如果在其他方法中获取将获取到一个invalidate的ref并且不能用于画图。drawRect:方法不能手动显示调用,必须通过调用setNeedsDisplay 或者 setNeedsDisplayInRect ,让系统自动调该方法。
2、若使用calayer绘图,只能在drawInContext: 中(类似鱼drawRect)绘制,或者在delegate中的相应方法绘制。同样也是调用setNeedDisplay等间接调用以上方法。
3、若要实时画图,不能使用gestureRecognizer,只能使用touchbegan等方法来掉用setNeedsDisplay实时刷新屏幕

转:http://blog.sina.com.cn/s/blog_726dee1101015gs8.html

Phone重绘机制drawRect 转相关推荐

  1. iPhone重绘机制drawRect

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

  2. iOS重绘机制drawRect

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

  3. windows重绘机制原理

    一.Windows程序中的绘制和更新 与DOS环境比较,Windows中的应用程序在处理文字和图形绘制时有以下区别: 1.只能在窗口的客户区域绘制文字和图形 2.在窗口上绘制的内容不一定能够保留到程序 ...

  4. ios uiview 如何刷新_UIView的重绘及布局刷新

    本文将简要讨论以下几个问题: 1.UIView的drawRect方法的调用机制及注意点 2.UIView的layoutSubviews.layoutIfNeeded.setNeedsLayout等方法 ...

  5. qt repaint 用法_Qt重绘之update,repaint详解

    Qt里面的重绘和Windows编程里面的重绘差不多.但是Qt的重绘更有特色,更加智能. 在讲之前,先说说paintEvent() paintEvent()是一个虚函数槽(slot),子类可以对父类的p ...

  6. android 重绘如何能不闪一下屏幕_浏览器渲染机制——重绘重排

    性能优化中,减少重绘重排应该是一种很好的优化方式,我们具体看一下什么情况下会造成重绘重排,为什么减少重绘重排可以做到优化,怎么样减少重绘重排. 浏览器渲染过程 我们先看看当浏览器拿到服务端返回的资源时 ...

  7. UITableviewcell重用机制以及解决重绘出现的重叠现象

    2019独角兽企业重金招聘Python工程师标准>>> UITableviewcell重用机制以及解决重绘出现的重叠现象 重点1.删除子控件 重点2.重新分配控件 该方法是自定义创建 ...

  8. 浏览器渲染机制、重排、重绘

    前言 浏览器的渲染机制.重排.重绘 一.页面生成 1. HTML会被HTMl解析器解析成DOM树 2. CSS会被CSS解析器解析成CSSOM树 3. 结合DOM树和CSSOM树生成一颗渲染树 4.将 ...

  9. java画笔覆盖在界面_Java实现画图程序和重绘

    上次聊了一下事件监听机制,今天就来聊一下怎么实现一个画图程序并且实现重绘. 一.实现画图程序 1.实现一个画图程序所需的API类? JFrame窗体容器组件类 JPanel 面板元素组件类 JButt ...

最新文章

  1. vse职位的全称_吉利汽车VSE岗(SE5AGBRC-M工资待遇怎么样 - 浙江吉利控股集团有限公司 - 职友集...
  2. VS2017 + cmake 3.7 + opencv 3.2 编译
  3. java 生成水印,Java 用html模板生成 Pdf 加水印
  4. [蓝桥杯]算法提高 金属采集(树形dp)
  5. linux 进程的vss rss uss,内核/内存管理中的VSS/RSS/PSS/USS
  6. zookeeper 日志查看_每天使用的注册中心zookeeper,流量暴涨怎么办?
  7. 零售创新决胜新消费暨2021中国网络零售TOP100榜单
  8. boost学习之BOOST_PP_REPEAT
  9. python连接php_PHP+Python,轻量维护超轻松
  10. 扩展BSGS-传送门
  11. 前嗅ForeSpider教程:采集预览
  12. VI.Multidocument Transactions
  13. 特斯拉和SolarCity推出太阳能屋顶瓦片
  14. 杨辉三角形c语言程序
  15. 如何使用NFC双界面读写器UTrust4701读取电子护照信息
  16. 大数据培训:Hadoop生态系统圈
  17. java ar教程_JavaFX教程整理
  18. 比特率  波特率  数据传输速率区别
  19. 【偶遇小bug】浏览器无法翻译此网页解决
  20. 2020最新阿里、腾讯、华为、字节跳动等大厂的薪资和职级对比

热门文章

  1. 基于django的视频点播网站开发-step2-搭建环境
  2. ORACLE安装报错解决
  3. “从A到I”智慧数据中心上海论坛
  4. 惊天大谎:让穷人都能上网是Facebook的殖民阴谋?
  5. 【原创】开源Math.NET基础数学类库使用(14)C#生成安全的随机数
  6. PHP识别电脑还是手机访问网站
  7. Linux系统中如何关闭触摸鼠标
  8. SQL游标原理和使用方法
  9. [转]对贡献有激情,对回报有信心
  10. ssm jsp跳转jsp_去掉Shiro默认login.jsp跳转