UIView 的frame(super),bounds(self),center,transform属性,
CAlayer的position,anchorPoint,transform。
前要:
1.frame/center是在superview坐标系;bounds是相对于自己坐标系。
2.position是在superview坐标系,表示锚点的位置;anchorPoint是相对于自己坐标系,表示锚点所处的比例,默认值是(0.5,0.5)即中心。
锚点由anchorPoint和position来反映。
position和anchorPoint共同决定了frame.origin。
3.一个view想要确定位置和大小,首先需要position参数,之后根据archorPoint(作用就是确定position在view中的位置)和 size (大小)来绘制view。锚点是各种transform以及bounds的size变换的参考点。
要点:
1.当一个view的frame被更改时
a.当更改size时,它的bounds的width和height会被更改为与frame的size一致,但是bounds的origin不会被更改。view的center,layer的position可能会被更改。
b.当更改origin时,对bounds属性无影响。view的center,layer的position可能会被更改。(会根据anchorPoint和origin计算position!)
2.当一个view的bounds被更改时
a.当更改size时,frame的width和size会改为同bounds的size一致,frame的origin有可能更改(取决于layer的anchorPoint,(0,0)则不更改)。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。
但是手动修改frame则不同,如果同时修改transform和frame,需要通过bounds和center找到真实位置。