您的位置:首页 > 其它

边框、边界、和中心的关系

2013-08-28 17:14 155 查看
视图对象通过
frame
bounds
、和
center
属性声明来跟踪自己的大小和位置。
frame
属性包含一个矩形,即边框矩形,用于指定视图相对于其父视图坐标系统的位置和大小。
bounds
属性也包含一个矩形,即边界矩形,负责定义视图相对于本地坐标系统的位置和大小。虽然边界矩形的原点通常被设置为
(0, 0),但这并不是必须的。
center
属性包含边框矩形的中心点

在代码中,您可以将
frame
bounds
、和
center
属性用于不同的目的。边界矩形代表视图本地的坐标系统,因此,在描画和事件处理代码中,经常借助它来取得视图中发生事件或需要更新的位置。中心点代表视图的中心,改变中心点一直是移动视图位置的最好方法。边框矩形是一个通过
bounds
center
属性计算得到的便利值,只有当视图的变换属性被设置恒等变换时,边框矩形才是有效的。

图2-4显示了边框矩形和边界矩形之间的关系。右边的整个图像 是从视图的(0, 0)开始描画的,但是由于边界的大小和整个图像的尺寸不相匹配,所以位于边界矩形之外的图像部分被自动裁剪。在视图和它的父视图进行合成的时候,视图在其 父视图中的位置是由视图边框矩形的原点决定的。在这个例子中,该原点是(5, 5)。结果,视图的内容就相对于父视图的原点向下向右移动相应的尺寸。

图2-4 视图的边框和边界之间的关系



如果没有经过变换,视图的位置和大小就由上述三个互相关联的属性决定的。当您在代码中通过
initWithFrame:
方法创建一个视图对象时,其
frame
属性就会被设置。该方法同时也将
bounds
矩形的原点初始化为(0.0, 0.0),大小则和视图的边框相同。然后
center
属性会被设置为边框的中心点。

虽然您可以分别设置这些属性的值,但是设置其中的一个属性会引起其它属性的改变,具体关系如下:

当您设置
frame
属性时,
bounds
属性的大小会被设置为与
frame
属性的大小相匹配的值,
center
属性也会被调整为与新的边框中心点相匹配的值。

当您设置
center
属性时,
frame
的原点也会随之改变。

当您设置
bounds
矩形的大小时,
frame
矩形的大小也会随之改变。

您可以改变
bounds
的原点而不影响其它两个属性。当您这样做时,视图会显示您标识的图形部分。在图2-4中,边界的原点被设置为(0.0, 0.0)。在图2-5中,该原点被移动到(8.0, 24.0)。结果,显示出来的是视图图像的不同部分。但是,由于边框矩形并没有改变,新的内容在父视图中的位置和之前是一样的。

图2-5 改变视图的边界



请注意:缺省情况下,视图的边框并不会被父视图的边框裁剪。如果您希望让一个视图裁剪其子视图,需要将其
clipsToBounds
属性设置为
YES
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: