frame,bounds,center之間的關(guān)系
Frame A (CGRect)表示其在superview的坐標(biāo)系中的矩形位置值戳。默認(rèn)從左上開(kāi)始虫埂。location(x,y), size(width,height).
Bounds A (CGRect)表示其在自身坐標(biāo)系中矩形位置主届。默認(rèn)location(x,y)為(0,0),size(width,height).
Center A (CGPoint)表示在其superview的坐標(biāo)系中的位置厂抽。
有以下幾個(gè)結(jié)論(前提是view沒(méi)有旋轉(zhuǎn))
frame.origin = center - (bounds.size / 2.0)
center = frame.origin + (bounds.size / 2.0)
frame.size = bounds.size
所以說(shuō) 如果你一直認(rèn)為view.frame.size = view.bouds.size,那么很遺憾的告訴你這個(gè)想法是錯(cuò)誤的羡蛾。因?yàn)槿绻鹶iew發(fā)生了旋轉(zhuǎn),結(jié)果就不是你想象的那個(gè)樣子了眷茁。
例子中是一旋轉(zhuǎn)了的圖片炕泳,所以frame.size != bounds.size.
當(dāng)你在一個(gè)view自身的坐標(biāo)系內(nèi)處理畫(huà)圖的時(shí)候,通常使用bounds屬性上祈。
對(duì)于一個(gè)view培遵,當(dāng)你改變了它的bounds.size,那么它的frame也會(huì)隨之改變(反之亦然)雇逞。而且這個(gè)改變是圍繞view的center改變的荤懂。
當(dāng)父view的bounds.origin改變,會(huì)影響其子view在父view中的位置塘砸。因?yàn)樽觱iew在父view中的布局是相對(duì)父view..bounds.origin=>(0,0)時(shí)的布局节仿。
CGRect rect = [[self view] bounds];
rect.origin.x += 30.0f;
rect.origin.y += 20.0f;
[[self view] setBounds:rect];
可以看出 子view位置變化了。