Chinaunix首页 | 论坛 | 博客
  • 博客访问: 591071
  • 博文数量: 92
  • 博客积分: 5026
  • 博客等级: 大校
  • 技术积分: 1321
  • 用 户 组: 普通用户
  • 注册时间: 2008-02-28 11:04
文章分类

全部博文(92)

文章存档

2011年(9)

2010年(17)

2009年(12)

2008年(54)

我的朋友

分类:

2010-10-29 15:15:40

开始iphone学习有几个月了,一直搞不太清楚uiview的frame,bounds,center的几个关系。近来温顾了一下,有写理解写出来。
基本概念:
        frame: 该view在父view坐标系统中的位置和大小。(参照点是,父亲的坐标系统)
        bounds:该view在本地坐标系统中的位置和大小。(参照点是,本地坐标系统)
        center:该view的中心点在父view坐标系统中的位置和大小。(参照电是,父亲的坐标系统)
实际上只有bounds和center两个属性。frame是为了方便直观多加的属性。所以修改了一个可能会影响到其他属性。文档中如下说:
        Although you can set the values of these properties independently, setting the value for one changes the others in t
he following ways:
        When you set the frame property, the size of the bounds property is set to match the size of the frameproperty. The center property is also adjusted to match the center point of the new frame.
        When you set the center property, the origin of the frame changes accordingly.
        When you set the size of the bounds rectangle, the size of the frame rectangle changes to match。

前两个很明显,最后一个bounds稍微有点费解。这里一定要顺便说下本地坐标系统:每个view都有一个本地坐标系统。这个坐标系统作用比较重要,比如触摸的回调函数中的UITouch里面的>坐标值都是参照这个本地坐标系统的坐标。当然bounds这个属性也是参照这个本地坐标系统来的。其实本地坐标系统的关键就是要知道的它的原点(0,0)在什么位置(这个位置又是相对于上层的view的本地坐标系统而言的,当然最上面的一层view就是window它的本地坐标系统原点就是屏幕的左上角了)。通过修改view的bounds属性可以修改本地坐标系统的原点位置。

修改bounds测试结果:
        bounds (0,0,100,100) --> (0,0,200,200) 本地坐标系统原点往左往上分别50。center不变,效果是按照中心放大view
        bounds(0,0,100,100) --> (100,100,100,100) 本地坐标系统原点往左往上分别100。center不变,没有可视效果变化(但是本地坐标系统的原点已经改变)
        
结论:
        bounds属性影响到本地坐标系统的原点。需要注意。

PS1:
理解了上面再去看apple的文档就迎刃而解了。

PS2:
transform这个属性现在还没搞清,记住,下次搞定。
        

阅读(2518) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2011-03-27 21:47:49

厉害!受教了,谢谢!终于知道bounds是怎么回事了

chinaunix网友2011-02-19 11:13:24

话都说不清楚,就不要说,误人子弟!