iOS 中的frame,bounds,center,transform关联

这里有一篇好文章 http://www.winddisk.com/2012/06/07/transform/

先看几个知识点,UIView 的frame,bounds,center,transform属性,CAlayer的position,anchorPoint,transform.

1.当一个view的frame被更改时

a.当更改size时,它的bounds的width和height会被更改为与frame的size一致,但是bounds的origin不会被更改。view的center,layer的position可能会被更改。

b.当更改origin时,对bounds属性无影响。view的center,layer的position可能会被更改。

2.当一个view的bounds被更改时

a.当更改size时,frame的width和size会改为同bounds的size一致,frame的origin有可能更改(取决于layer的anchorPoint)。view的center,layer的position可能会被更改不会更改。

b。当更改origin时,frame无影响,view的center,layer的position不会更改。

3.当view的center更改时

frame的origin会更改,layer的position会更改。

4.当一个view的transform被更改了,即不为CGAffineTransformIdentity。

frame属性可能会更改,view的bounds,center不会变,layer的position不会变。这个很重要,这样保持了在transform后,view的frame虽然改变了,但是内部参考系是不变的,可以继续进行其他变换,只要不更改frame或center或layer的position。

总结一下,对于一个view,要确定显示样式,最重要的有2个参数,一个是大小,一个是锚点。大小由size来反映;锚点由anchorPoint和position来反映,其中Position指的是锚点在父节点中的坐标值,而anchorPoint含有锚点在本节点中的相对位置。我的理解是,一个view想要确定位置和大小,首先需要position参数,之后根据archorPoint(作用就是确定position在view中的位置)和 size (图片大小)来绘制view。锚点是各种transform以及bounds的size变换的参考点。

原文地址:https://www.cnblogs.com/breezemist/p/3457286.html