layoutSubviews在以下情况下会被调用:
1、init初始化不会触发layoutSubviews。
2、addSubview会触发layoutSubviews。
3、设置view的Frame会触发layoutSubviews,当然前提是frame的值设置前后发生了变化。
4、滚动一个UIScrollView会触发layoutSubviews。
5、旋转Screen会触发父UIView上的layoutSubviews事件。
6、改变一个UIView大小的时候也会触发父UIView上的layoutSubviews事件。
7、直接调用setLayoutSubviews。
drawRect在以下情况下会被调用:
1、如果在UIView初始化时没有设置rect大小,将直接导致drawRect不被自动调用。drawRect 掉用是在Controller->loadView, Controller->viewDidLoad 两方法之后掉用的.所以不用担心在 控制器中,这些View的drawRect就开始画了.这样可以在控制器中设置一些值给View(如果这些View draw的时候需要用到某些变量 值).
2、该方法在调用sizeToFit后被调用,所以可以先调用sizeToFit计算出size。然后系统自动调用drawRect:方法。
3、通过设置contentMode属性值为UIViewContentModeRedraw。那么将在每次设置或更改frame的时候自动调用drawRect:。
4、直接调用setNeedsDisplay,或者setNeedsDisplayInRect:触发drawRect:,但是有个前提条件是rect不能为0。
以上1,2推荐;而3,4不提倡
drawRect方法使用注意点:
1、 若使用UIView绘图,只能在drawRect:方法中获取相应的contextRef并绘图。如果在其他方法中获取将获取到一个invalidate 的ref并且不能用于画图。drawRect:方法不能手动显示调用,必须通过调用setNeedsDisplay 或 者 setNeedsDisplayInRect,让系统自动调该方法。
2、若使用calayer绘图,只能在drawInContext: 中(类似鱼drawRect)绘制,或者在delegate中的相应方法绘制。同样也是调用setNeedDisplay等间接调用以上方法
3、若要实时画图,不能使用gestureRecognizer,只能使用touchbegan等方法来掉用setNeedsDisplay实时刷新屏幕

转载于:https://www.cnblogs.com/guangleijia/p/5046222.html

layoutSubviews 与 drawRect相关推荐

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

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

  2. UIView的layoutSubviews和drawRect

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

  3. 对应用程序启动时所有方法的调用顺序分析

    一个应用程序的启动过程要包括代理的创建,控制器的加载和控制器view的加载,这其中有很多关于生命周期的方法,每个方法都是有先后顺序的,如果调用顺序拿不准,或者某段代码写的方法不恰当,就会遇到各种奇葩问 ...

  4. 从 setNeedsLayout 说起

    本文从 setNeedsLayout 这个方法说起,分享与其相关的 UIKit 视图交互.使用场景等内容. UIKit 为 UIView 提供了这些方法来进行视图的更新与重绘: public func ...

  5. iPhone应用程序编程指南(窗口和视图)

    窗口和视图 窗口为内容显示提供背景平台,而视图负责绝大部分的内容描画,并负责响应用户的交互. 什么是窗口和视图? UIWindow的作用 iPhone应用程序通常只有一个窗口,表示为一个UIWindo ...

  6. iOS开发基础知识--碎片27

     iOS开发基础知识--碎片27 1:iOS中的round/ceil/floorf extern float ceilf(float); extern double ceil(double); ext ...

  7. iOS面试题目及答案总结

    这是一些常见的笔试问题,总共12道题目.题目标红了,答案的话是我从网上查来的,大家觉得不标准的可以自行百度. (1)    应用程序启动时的顺序 首先回顾一下应用程序的启动过程 ①.先加载Main函数 ...

  8. iOS APP启动函数调用顺序~详解

    //联系人:石虎  QQ: 1224614774昵称:嗡嘛呢叭咪哄 一.OC调用 C++ 会为静态创建的对象生成初始化器,与静态语言不同,OC基于Runtime机制可以用类的名字来实例化一个类的对象. ...

  9. ios UIView全部API解读

    /********* UIView是iOS系统界面元素的基础,所有的界面元素都是集成自它.它本身完全是由CoreAnimation来实现的.它真正的绘图部分,是一个叫CALayer(Core Anim ...

最新文章

  1. YOLOV5 的小目标检测网络结构优化方法汇总(附代码)
  2. 前端培训_backbone
  3. python3.6.2下载教程_Windows下升级Python3.7.7后(原Python3.6.2版本)如何切换Python版本|python基础教程|python入门|python教程...
  4. hdu 1086 线段相交
  5. EntityFramwork(1) 源地址https://msdn.microsoft.com/zh-cn/data/jj193542
  6. flash air 解析html,AIR 程序内部显示网页,并可以点击浏览的方法(HTMLLoader、StageWebView)...
  7. 进阶篇-安卓系统:2.多点触控的交互处理
  8. windows命令行无法启动redis_windows系统安装redis
  9. 定时器中断实验 编写程序使定时器0或者定时器1工作在方式1,定时50ms触发蜂鸣器。
  10. java okhttp3 工具类,Retrofit+okhttp+Rxjava网络请求工具类
  11. 【MySQL】MySQL 管理员必备技能 用户 权限 管理
  12. OCX控件注册相关(检查是否注册,注册,反注册)
  13. linux二进制安装包制作,linux下二进制安装包的创建
  14. Tensorflow游乐场
  15. 递归算法经典实例python-递归案例python
  16. EXCEL 求解线性规划问题
  17. 小米--万物互联实现原理
  18. python绘制登陆时的卫星云图(TBB)
  19. Transformer翻译模型Decoder详解(Masking)
  20. gcc 编译时中-L -l -Wall的含义

热门文章

  1. @Valid注解详解
  2. ES查看索引库结构和数据
  3. 电脑出现 flash update failed 解决方法
  4. sublime text3:呼出安装插件的快捷键
  5. Linux基础 -- vim编辑器3 -- 查找和替换
  6. hdu 5215 Cycle
  7. BeJavaGod - 如何正确使用数据字典进行分类统一操作(一)
  8. centos7 最小化安装 无 ifconfig,netstat 的安装
  9. 修改linux默认语言
  10. spring配置mysql事务管理_Spring 数据库事务管理机制