直接上结论
-
首先
frame和bounds的size都是控件本身的尺寸。区别就在origin上。 -
frame.origin:是决定当前控件,相对于父控件的位置。 -
bounds.origin:是决定子控件相当于父视图原点的位置。修改bounds.origin就是修改子控件布局的参照原点
bounds.origin 的设值 与 frame.origin 不同,相同的参考系,bounds.origin需要设置负值。参见下图:
上图:
引申出UIScrollView的原理:
改视图 bounds 的 origin 视图本身没有发生变化,但是它的子视图的位置却发生了变化,因为 bounds 的 origin 值是基于自身的坐标系,当自身坐标系的位置被改变了,里面的子视图肯定得变化, bounds 和 panGestureRecognize 是实现 UIScrollView 滑动效果的关键技术点。
其中 UIScrollView.contentOffset == -(bounds.origin)