iOS中bounds和frame的理解

2016-08-10  本文已影响141人  Shawn_Wang

frame,bounds,center之间的关系

Frame A (CGRect)表示其在superview的坐标系中的矩形位置。默认从左上开始。location(x,y), size(width,height).

Bounds A (CGRect)表示其在自身坐标系中矩形位置。默认location(x,y)为(0,0),size(width,height).

Center A (CGPoint)表示在其superview的坐标系中的位置。

有以下几个结论(前提是view没有旋转)

frame.origin = center - (bounds.size / 2.0)
center = frame.origin + (bounds.size / 2.0)
frame.size = bounds.size

所以说 如果你一直认为view.frame.size = view.bouds.size,那么很遗憾的告诉你这个想法是错误的。因为如果view发生了旋转,结果就不是你想象的那个样子了。

1.png

例子中是一旋转了的图片,所以frame.size != bounds.size.

当你在一个view自身的坐标系内处理画图的时候,通常使用bounds属性。
对于一个view,当你改变了它的bounds.size,那么它的frame也会随之改变(反之亦然)。而且这个改变是围绕view的center改变的。

当父view的bounds.origin改变,会影响其子view在父view中的位置。因为子view在父view中的布局是相对父view..bounds.origin=>(0,0)时的布局。

2.png
CGRect rect = [[self view] bounds];
rect.origin.x += 30.0f;
rect.origin.y += 20.0f;
[[self view] setBounds:rect];
3.png

可以看出 子view位置变化了。

上一篇下一篇

猜你喜欢

热点阅读