drawRect setNeedsDisplay layoutSubViews

drawRect   setNeedsDisplay layoutSubViews

1、 drawRect: is invoked automaticall,never call it directly!!

2、 When a view needs to be redrawn,use:

- (void)setNeedsDisplay;

3、在非主线程中调用,需使用如下方法:

- (void)performSelector:(SEL)aSelector onThread:(NSThread *)thr withObject:(id)arg waitUntilDone:(BOOL)wait
      - (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait

4、setNeedsDisplay是不阻塞的,
     需要自己制造阻塞,
     setNeedsDisplay我理解就是告诉系统,等会帮哥把这块重新画一下。
     系统就知道了,等系统有空了,他就一起画了,
     如果想立即画出来,可能要用setNeedsLayout,
     或者不用drawInRect系列的方式,直接改view.image或者文字,加动画等方式实现吧。

5、setNeedsDisplay和layoutSubViews

首先两个方法都是异步执行的。而setNeedsDisplay会调用自动调用drawRect方法,这样可以拿到
UIGraphicsGetCurrentContext,就可以画画了。而setNeedsLayout会默认调 
用layoutSubViews,就可以处理子视图中的一些数据。
宗上所诉,setNeedsDisplay方便绘图,而layoutSubViews方便出来数据。

时间: 2024-08-05 14:23:42

drawRect setNeedsDisplay layoutSubViews的相关文章

iOS 开发 - 在哪里更新 custom view 的subviews 的位置信息? (drawRect: 还是 layoutSubviews ?)

对于custom,可以通过addSubview: 增加内容,也可以通过Core Graphic绘制内容. 对于后者,在drawRect: 进行,位置信息随之确定 对于前者,一般在view初始化时进行(也可以动态地在其它地方进行),设置subview的位置信息时,需要了解下面的区别: - 在 layoutSubviews中,此时custom view 的bounds虽然已经确定,但是对于有constraint的subview(比如在nib文件中添加的约束),其位置信息还没有按照constraint

UIView的drawRect和layoutSubviews方法

注意三点: 1.两个方法都是异步执行的 2.使用init初始化UIView两个方法都不会调用,所以在init中最好是初始化数据,而在上述两个方法中初始化视图 3.最好使用drawRect初始化视图,layoutSubviews在继承UIScrollView或UITableView等情况下,会调用两次 MyView.h @interface MyView : UIView @end MyView.m #import "MyView.h" @implementation MyView - 

drawRect和layoutSubviews的区别

两个方法都是异步执行的,layoutSubviews方便数据计算,drawRect方便视图重绘. layoutSubviews对subviews重新布局layoutSubviews方法调用先于drawRect

京东/优酷IOS面试题

京东面试题 1.请写出以下代码输出 1 2 3 4 5 int a[5] = {1, 2, 3, 4, 5}; int *ptr = (int *)(&a + 1); printf("%d, %d", *(a + 1), *(ptr + 1)); 参考答案: 2, 随机值 这种类型题好像挺常见的.考的就是C语言上的指针的理解和数组的理解. 分析: a代表有5个元素的数组的首地址,a[5]的元素分别是1,2,3,4,5.接下来,a + 1表示数据首地址加1,那么就是a[1],也就

swift 之SnapKit 动画

这个问题纠结了我挺长时间的.一直以为把约束直接添加到动画里面就可以了.但是并没那么简单.-.-其实还是挺简 class ViewController: UIViewController { @IBOutlet weak var usernameOutlet: UITextField! @IBOutlet weak var animateBtn: UIButton! let boxView = UIView() var topConstraint: Constraint? = nil @IBAct

李洪强iOS开发之性能优化技巧

李洪强iOS开发之性能优化技巧 通过静态 Analyze 工具,以及运行时 Profile 工具分析性能瓶颈,并进行性能优化.结合本人在开发中遇到的问题,可以从以下几个方面进行性能优化. 一.view优化 1.不透明的View 设置为opaque. 2.根据实际情况重用.延迟加载或预加载View. 3.减少subviews数量,定制复杂cell使用drawRect.尽量使用drawRect而不是layoutSubView. 4.不直接调用drawRect. layoutSubviews方法.万不

常见笔试题(三)

11.面向对象的三大特征,并作简单的介绍. 面向对象的三个基本特征是:封装.继承.多态. 封装是面向对象的特征之一,是对象和类概念的主要特性. 封装,也就是把客观事物封装成抽象的类,并且类可以把自己的 数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏.隐藏对象的属性和实现细节,仅对外公开接口,提高代 码安全性,封转程度越高,独立性越强,使用越方便. 继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展. 通过 继承创建的新类称为"子类&q

从零开始读MBProgressHUD(三)

从零开始读MBProgressHUD(三) -layoutSubviews和drawRect: 本文主要技术点如下: -layoutSubviews的主要作用 -layoutSubviews的调用 setNeedsLayout和layoutIfNeeded的区别 分析MBProgressHUD类的-layoutSubviews代码 分析MBProgressHUD类的drawRect:代码 -layoutSubviews的主要作用 -layoutSubviews是UIView的属性方法,顾名思义,

iOS性能优化技巧

iOS性能优化技巧 通过静态 Analyze 工具,以及运行时 Profile 工具分析性能瓶颈,并进行性能优化.结合本人在开发中遇到的问题,可以从以下几个方面进行性能优化. 一.view优化 1.不透明的View 设置为opaque. 2.根据实际情况重用.延迟加载或预加载View. 3.减少subviews数量,定制复杂cell使用drawRect.尽量使用drawRect而不是layoutSubView. 4.不直接调用drawRect. layoutSubviews方法.万不得已时可以用