UIView常用的一些方法小记之setNeedsDisplay和setNeedsLayout

1,UIView的setNeedsDisplay和setNeedsLayout方法

  首先两个方法都是异步执行的。而setNeedsDisplay会调用自动调用drawRect方法,这样可以拿到  UIGraphicsGetCurrentContext,就可以画画了。而setNeedsLayout会默认调用layoutSubViews,

 就可以  处理子视图中的一些数据。

综上所诉,setNeedsDisplay方便绘图,而layoutSubViews方便出来数据。

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/feijietongti/p/5015516.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/419238.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入理解Java中为什么内部类可以访问外部类的成员

转载自:http://blog.csdn.net/zhangjg_blog/article/details/20000769 内部类简介 虽然Java是一门相对比较简单的编程语言,但是对于初学者, 还是有很多东西感觉云里雾里, 理解的不是很清晰。内部类就是一个经常让初学者感到迷惑的…

JMS与Spring之二(用message listener container异步收发消息)

转自:http://blog.csdn.net/moonsheep_liu/article/details/6684948转载于:https://www.cnblogs.com/septemberlxc/p/5016275.html

ASP.NET MVC5+EF6+EasyUI 后台管理系统(51)-系统升级

系统很久没有更新内容了,期待已久的更新在今天发布了,最近花了2个月的时间每天一点点,从原有系统 MVC4EF5UNITY2.XQuartz 2.0easyui 1.3.4无缝接入 MVC5EF6Unity4.xQuartz 2.3 easyui 1.4.3. 并以easyui 1.4.3的gray皮肤为基础,升…

cocos2d-x-3.x 动作(5)序列动作

其实就是按照顺序来执行动作指令。 1 bool HelloWorld::init()2 {3 if (!Layer::init())4 {5 return false;6 }7 8 Size visibleSize Director::getInstance()->getVisibleSize();9 Sprite *label Sprite::create("what.png"); 10 …

前端学习(1696):前端系列javascript之class和继承

class Prople {constructor(name) {this.name name;}eat() {console.log(${this.name} eat something)} }//类 class Student extends Prople {constructor(name, number) {super(name);this.number number;}sayHi() {console.log(姓名 ${this.name} .学号 ${this.number})} …

vue的computed计算属性学习

模板内的表达式是非常便利的,但是它们实际上只用于简单的运算。在模板中放入太多的逻辑会让模板过重且难以维护。这时候需要使用到vue的计算属性computed。 文件目录结构如下:利用vue脚手架创建 这里实现将一个字符串进行翻转的功能: 其中H…

android错误详解教程二

原因&#xff1a;XML文件中<ImageView 写成<imageView 大小写写错转载于:https://www.cnblogs.com/-monster/p/5023969.html

js中小数取整数(向上、向下取整数,四舍五入取整数的实现)

1.ceil() 向上----------ceil英文意思&#xff1a;天花板-----------表示向上取整 2.floor() 向下-----------floor英文意思&#xff1a;地面-----------表示乡下取整 3.floor() 四舍五入----------floor英文意思&#xff1a;大约-----------表示四舍五入 如下实例&#xff1a…

subroutines of perl

#!/usr/bin/perl -wstudents qw/Doreen Oskar Elin Sangeet Malin/;&next_student;&next_student;sub next_student {$i;print "the next student is $students[$i]\n"; }the next student is Oskar the next student is Elin 转载于:https://www.cnblogs.c…

“睡服”面试官系列第十四篇之数组的扩展(建议收藏学习)

目录 1. 扩展运算符 1含义 1.2替代数组的 apply 方法 1.3扩展运算符的应用 1.3.1复制数组 1.3.2合并数组 1.3.3与解构赋值结合 1.3.4字符串 1.3.5实现了 Iterator 接口的对象 1.3.6Map 和 Set 结构&#xff0c;Generator 函数 2. Array.from() 3. Array.of() 4. 数…

数字证书及CA的扫盲介绍

转载自 http://kb.cnblogs.com/page/194742/★ 先说一个通俗的例子考虑到证书体系的相关知识比较枯燥、晦涩。俺先拿一个通俗的例子来说事儿。◇ 普通的介绍信想必大伙儿都听说过介绍信的例子吧&#xff1f;假设 A 公司的张三先生要到 B 公司去拜访&#xff0c;但是 B 公司的所…

iOS-网络爬虫

1.iOS开发——网络实用技术OC篇&网络爬虫&#xff0d;使用青花瓷抓取网络数据 2.iOS开发——网络使用技术OC篇&网络爬虫&#xff0d;使用正则表达式抓取网络数据 3.iOS—网络实用技术OC篇&网络爬虫&#xff0d;使用java语言抓取网络数据转载于:https://www.cnblogs…

用css样式画三角形(提示框三角形)

转载自https://blog.csdn.net/hope_It/article/details/70217954 经常用于提示框&#xff0c;下拉菜单等&#xff08;csdn也很多用到&#xff0c;最后一图&#xff09; 三角形画法 html结构 <div class"triangle"> </div>三角形画法 用border画出&…

BZOJ1192: [HNOI2006]鬼谷子的钱袋

Description 鬼谷子非常聪明&#xff0c;正因为这样&#xff0c;他非常繁忙&#xff0c;经常有各诸侯车的特派员前来向他咨询时政。有一天&#xff0c;他在咸阳游历的时候&#xff0c;朋友告诉他在咸阳最大的拍卖行&#xff08;聚宝商行&#xff09;将要举行一场拍卖会&#xf…

“睡服”面试官系列第十五篇之对象的扩展(建议收藏学习)

目录 1. 属性的简洁表示法 2. 属性名表达式 3. 方法的 name 属性 4. Object.is() 5. Object.assign() 5.1基本用法 5.2注意点 5.21.浅拷贝 5.2.2同名属性的替换 5.2.3数组的处理 5.2.4取值函数的处理 5.3常见用途 5.3.1为对象添加属性 5.3.2为对象添加方法 5.3…

前端后端接口那些事吐槽

今天与另一位前端开发人员扯起了后端接口的皮&#xff08;我也是前端人员&#xff09;&#xff0c;那个兄弟对后端人员提供的接口很大的意见&#xff08;我是司空见惯&#xff09;&#xff0c;不过他说的也确实有道理&#xff0c;所以结合我的见解&#xff0c;希望提供接口的人…