理解frame、bounds、center、position、anchorPoint

UIView有三个比较重要的布局属性:frameboundscenterCALayer对应地叫做frameboundsposition。为了能清楚区分,图层用了“position”,视图用了“center”,但是他们都代表同样的值。

frame:描述当前界面元素在其父界面元素中的位置和大小。

bounds:描述当前界面元素在其自身坐标系统中的位置和大小。

center:描述当前界面元素的中心点在其父界面元素中的位置,图层用了“position”,视图用了“center”,但是他们都代表同样的值。一般我们可以通过以下公式得出center:

center.x = frame.origin.x + frame.size.width * 0.5;  

center.y = frame.origin.y + frame.size.height * 0.5;  


position是layer相对superLayer坐标空间的位置,很显然,这里的位置是根据anchorPoint来确定的。 至于如何确定,请看下面的公式:

position.x = frame.origin.x + anchorPoint.x * bounds.size.width;

position.y = frame.origin.y + anchorPoint.y * bounds.size.height;



UIViewCALayer的坐标系


视图的frame,bounds和center属性仅仅是储方法,当操纵frame,实际上改变位下视图下CAlayer的frame,不能独立于图层外改变视图的frame.

对于视图或者图层来说,frame并不是一个非常清晰的属性,它其实是一个虚拟属性,是根据boundspositiontransform计算而来,所以当其中任何一个值发生改变,frame都会变化。相反,改变frame的值同样会影响到他们当中的值。


anchorPoint(锚点)是用来移动图层的把柄,如把一张A4白纸用图钉订在书桌上,如果订得不是很紧的话,白纸就可以沿顺时针或逆时针方向围绕图钉旋转,这时候图钉就起着支点的作用。我们要解释的anchorPoint就相当于白纸上的图钉,它主要的作用就是用来作为变换的支点,旋转就是一种变换,类似的还有平移、缩放。

anchorPoint位于图层的中点,所以图层的将会以这个点为中心放置。



总结

1、position是layer中的anchorPoint在superLayer中的位置坐标。 

2、互不影响原则:单独修改position与anchorPoint中任何一个属性都不影响另一个属性。 
  3、frame、position与anchorPoint有以下关系:

frame.origin.x = position.x - anchorPoint.x * bounds.size.width;

frame.origin.y = position.y - anchorPoint.y * bounds.size.height;

第2条的互不影响原则还可以这样理解:position与anchorPoint是处于不同坐标空间中的重合点,修改重合点在一个坐标空间的位置不影响该重合点在另一个坐标空间中的位置。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值