setNeedDisplay,layoutSubviews,layoutIfNeeded,setNeedsLayout

在项目中看到 setNeedDisplay 这个方法的使用,从而想起了其他 UIView 的布局的其他方法。从而记录下。

在工程中是在绘制手势功能的 View 中看到可 setNeedDisplay 方法。查看资料了解到,setNeedDisplay 是异步执行的。同时调用这个方法会自动执行 drawRect 方法,调用 drawRect 方法就可以使用 UIBezierPath 和 CGContextRef 对象来进行一系列操作了。在工程中就是在 drawRect 中进行手动滑动画线的功能的实现。

layoutSubviews 也会在一些操作后会自动调用。

1.addSubview 会触发

2.设置 view 的 frame 会触发,重新设置的 frame 和原本的值发生变化

3.滚动一个 UIScrollView 会触发

4.横竖屏切换时,会触发父UIView 上的 layoutSubviews

layuotIfNeed 也是异步执行的, 这个方法经常会用,就是根据数据来更新 View 的 frame,这时就需要调用次方法来手动刷新 View 的布局。调用 layoutIfNeed 强制立即刷新 layout。

有时当你在改变一个 View 的某个约束后,在 [UIView animateWithDuration:] 方法中调用 layoutIfNeed 不管是哪一个 View 的约束改变了它都会以动画的形式过度到重新约束的位置。改变了某个 View 的约束,但不想以动画的形式则在动画方法之前调用该方法。

setNeedsLayout 是标记某个 View 需要更新 layout ,不会立即更新。

参考链接:

http://www.cnblogs.com/ygm900/p/3652890.html

http://www.jianshu.com/p/eb2c4bb4e3f1

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 首先两个方法都是异步执行,layoutSubviews方便数据计算,drawRect方便视图重绘。 layoutS...
    騂跃神话阅读 8,683评论 1 13
  • 自动布局在 OS X 10.7 中被引进,一年后在 iOS 6 中也可以用了。不久在 iOS 7 中的程序将会有望...
    评评分分阅读 4,481评论 0 7
  • 7、不使用IB是,下面这样做有什么问题? 6、请说说Layer和View的关系,以及你是如何使用它们的。 1.首先...
    AlanGe阅读 4,079评论 0 1
  • 面向未来,推动中华文化现代化 文化是民族的魂,中华优秀传统文化是中华民族屹立于世界民族之林的根本。在五千多年的历史...
    井冈山豆皮阅读 5,244评论 0 4
  • 分手的第二天,他打电话说钥匙放到我家门外地毯下面了,我们没有相见,这次他走的在我看来也够帅气。我们的见面也止于上次...
    小调女王阅读 2,920评论 0 0