关于UIView的Layer,IOS提供了三个方法

转载 2015年07月10日 11:43:04

关于UIView的Layer,IOS提供了三个方法:

1、layoutSubviews

在iOS5.1和之前的版本,此方法的缺省实现不会做任何事情(实现为空),iOS5.1之后(iOS6开始)的版本,此方法的缺省实现是使用你设置在此view上面的constraints(Autolayout)去决定subviews的position和size。 UIView的子类如果需要对其subviews进行更精确的布局,则可以重写此方法。只有在autoresizingconstraint-based behaviors of subviews不能提供我们想要的布局结果的时候,我们才应该重写此方法。可以在此方法中直接设置subviews的frame。 我们不应该直接调用此方法,而应当用下面两个方法。

2、setNeedsLayout

此方法会将view当前的layout设置为无效的,并在下一个upadte cycle里去触发layout更新。

3、layoutIfNeeded

使用此方法强制立即进行layout,从当前view开始,此方法会遍历整个view层次(包括superviews)请求layout。因此,调用此方法会强制整个view层次布局。


基于约束的AutoLayer的方法:

1、setNeedsUpdateConstraints

当一个自定义view的某个属性发生改变,并且可能影响到constraint时,需要调用此方法去标记constraints需要在未来的某个点更新,系统然后调用updateConstraints.

2、needsUpdateConstraints

constraint-based layout system使用此返回值去决定是否需要调用updateConstraints作为正常布局过程的一部分。

3、updateConstraintsIfNeeded

立即触发约束更新,自动更新布局。

4、updateConstraints

自定义view应该重写此方法在其中建立constraints. 注意:要在实现在最后调用[super updateConstraints]

Auto Layout Process 自动布局过程

与使用springs and struts(autoresizingMask)比较,Auto layout在view显示之前,多引入了两个步骤:updating constraints 和laying out views。每一个步骤都依赖于上一个。display依赖layout,而layout依赖updating constraints。 updating constraints->layout->display

第一步:updating constraints,被称为测量阶段,其从下向上(from subview to super view),为下一步layout准备信息。可以通过调用方法setNeedUpdateConstraints去触发此步。constraints的改变也会自动的触发此步。但是,当你自定义view的时候,如果一些改变可能会影响到布局的时候,通常需要自己去通知Auto layout,updateConstraintsIfNeeded。

自定义view的话,通常可以重写updateConstraints方法,在其中可以添加view需要的局部的contraints。

第二步:layout,其从上向下(from super view to subview),此步主要应用上一步的信息去设置view的center和bounds。可以通过调用setNeedsLayout去触发此步骤,此方法不会立即应用layout。如果想要系统立即的更新layout,可以调用layoutIfNeeded。另外,自定义view可以重写方法layoutSubViews来在layout的工程中得到更多的定制化效果。

第三步:display,此步时把view渲染到屏幕上,它与你是否使用Auto layout无关,其操作是从上向下(from super view to subview),通过调用setNeedsDisplay触发,

因为每一步都依赖前一步,因此一个display可能会触发layout,当有任何layout没有被处理的时候,同理,layout可能会触发updating constraints,当constraint system更新改变的时候。

需要注意的是,这三步不是单向的,constraint-based layout是一个迭代的过程,layout过程中,可能去改变constraints,有一次触发updating constraints,进行一轮layout过程。

注意:如果你每一次调用自定义layoutSubviews都会导致另一个布局传递,那么你将会陷入一个无限循环中。 

如下图:

UIView 上下文和layer之间的关系详解

iOS绘图教程(一)   (2014-01-16 12:50:10) 转载▼   分类: ios绘图教程 原文链接:http://www...
  • moxi_wang
  • moxi_wang
  • 2015年09月07日 15:12
  • 1532

iOS中UIView layer的对应关系

http://blog.csdn.net/iukey 一、添加 Quartz Core 框架 1、要使用 Quartz Core 框架,你需要将其添加到你的工程中  2、然后  #i...
  • potato512
  • potato512
  • 2015年05月30日 14:27
  • 1437

教你把UIView切成任意形状 通过ShapeLayer

有时候layer.cornerRadius并不能满足需求,自己实现drawRect又太麻烦,怎么办? 多的不说,直接上代码:   1 2 3 4 5 6 7 8 9 ...
  • sd19871122
  • sd19871122
  • 2015年07月09日 20:10
  • 898

UIView及其分类的属性方法定义

UIView是iOS开发中最熟悉的控件,不是因为它用得多,而是很多UI控件都是继承它的,了解它的分类方法是很有必要的。 UIView其实是由多个分类构成,主要有如下几个分类: UIView :基本属性...
  • qq_14920635
  • qq_14920635
  • 2017年03月28日 17:04
  • 505

ios layer的一些学习

layer类似于ps的图层,如果把一个uiview看做图片的画,layer就像是图层.一个图片是由很多个大小不同的有层次的图层构成的,uiview也是. 1. 一个view有一个underlyi...
  • mad2man
  • mad2man
  • 2013年11月23日 11:53
  • 10737

ios UIView的回调方法

当视图层级有变化时,系统可以向相关视图发送回调。iOS SDK提供了留个回调的方法,应用程序可以通过这些方法来追踪视图的移动以及上层视图的变动: 1、didAddSubview:如果有人通过addSu...
  • ChasingDreamsCoder
  • ChasingDreamsCoder
  • 2016年11月10日 15:50
  • 610

iOS UIView非常用方法及属性详解

在调用视图的drawRect:方法之前,UIKit 会自动对描画环境进行配置,使左上角成为 坐标系统的原点,在这个环境中发生的 Quartz 调用都可以正确地在视图中描画。   视图对象...
  • luckypeng
  • luckypeng
  • 2016年04月02日 13:09
  • 2392

UIView及其子类围绕任意点旋转的方法

UIView本身是支持旋转的,可以用UIView.transform属性实现旋转。 The origin of the transform is the value of the center ...
  • u010679895
  • u010679895
  • 2015年06月26日 11:55
  • 1447

iOS开发UI篇-UIView的生命周期

一、 大体流程: (loadView/nib)文件来加载view到内存–>viewDidLoad函数进一步初始化这些view–>内存不足时, 调用viewDidUnload函数释放views–>当需要...
  • yiwangchenai
  • yiwangchenai
  • 2016年07月21日 12:46
  • 943

IOS 以任意点为圆心 旋转UIView

围绕底边中点旋转                            UIView本身是支持旋转的,可以用UIView.transform属性实现旋转。 The origin of th...
  • holdsky
  • holdsky
  • 2014年11月01日 17:04
  • 4807
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于UIView的Layer,IOS提供了三个方法
举报原因:
原因补充:

(最多只允许输入30个字)