关于 frame、bounds 和 center

引言:

每个视图有两个属性:framebounds。这两个属性都是一个简单的数据结构,叫做CGRect,其中定义了一个原点(x,y), 以及一个尺寸(宽度, 高度)。虽然相似, 实际上视图的frame和bounds有不同的定义和用途。

通过以下属性可以修改控件的位置: frame.origin, center; 通过以下属性可以修改控件的尺寸: frame.size, bounds.size


# 一. frame

视图的frame定义了一个矩形的宽和高, 以及一个原点, 原点的值是该视图的原点在父视图中的位置。

    self.floatView.frame = CGRectMake(0, 0, 100, 100);

# 二. bounds

视图的bounds也定义了宽和高, 但是原点是相对于当前视图的值,并且通常是(0, 0)。


# 三. center

center为视图的中心点, 是基于 frame 的 originsize 决定的。

center 是一个结构体,包含x和y。

center.x = frame.origin.x + frame.size.width/2; 
center.y = frame.origin.y + frame.size.height/2;

# 四. 总结

frame 修改, 会影响到 center 和 bounds

center 修改, 会影响 frame, bounds 不发生变化

bounds 修改, 会影响到 frame 和 center