UIView 的frame(super),bounds(self),center,transform屬性,
CAlayer的position,anchorPoint,transform。
前要:
1.frame/center是在superview坐標(biāo)系;bounds是相對(duì)于自己坐標(biāo)系。
2.position是在superview坐標(biāo)系,表示錨點(diǎn)的位置;anchorPoint是相對(duì)于自己坐標(biāo)系,表示錨點(diǎn)所處的比例,默認(rèn)值是(0.5,0.5)即中心。
錨點(diǎn)由anchorPoint和position來(lái)反映。
position和anchorPoint共同決定了frame.origin。
3.一個(gè)view想要確定位置和大小,首先需要position參數(shù),之后根據(jù)archorPoint(作用就是確定position在view中的位置)和 size (大小)來(lái)繪制view。錨點(diǎn)是各種transform以及bounds的size變換的參考點(diǎn)。
要點(diǎn):
1.當(dāng)一個(gè)view的frame被更改時(shí)
a.當(dāng)更改size時(shí),它的bounds的width和height會(huì)被更改為與frame的size一致,但是bounds的origin不會(huì)被更改。view的center,layer的position可能會(huì)被更改。
b.當(dāng)更改origin時(shí),對(duì)bounds屬性無(wú)影響。view的center,layer的position可能會(huì)被更改。(會(huì)根據(jù)anchorPoint和origin計(jì)算position!)
2.當(dāng)一個(gè)view的bounds被更改時(shí)
a.當(dāng)更改size時(shí),frame的width和size會(huì)改為同bounds的size一致,frame的origin有可能更改(取決于layer的anchorPoint,(0,0)則不更改)。view的center,layer的position可能會(huì)被更改不會(huì)更改。
b。當(dāng)更改origin時(shí),frame無(wú)影響,view的center,layer的position不會(huì)更改。
3.當(dāng)view的center更改時(shí)
frame的origin會(huì)更改,layer的position會(huì)更改。
4.當(dāng)一個(gè)view的transform被更改了,即不為CGAffineTransformIdentity。
frame屬性可能會(huì)更改,view的bounds,center不會(huì)變,layer的position不會(huì)變。這個(gè)很重要,這樣保持了在transform后,view的frame雖然改變了,但是內(nèi)部參考系是不變的,可以繼續(xù)進(jìn)行其他變換。
只要不更改frame或center或layer的position。
但是手動(dòng)修改frame則不同,如果同時(shí)修改transform和frame,需要通過(guò)bounds和center找到真實(shí)位置。