iOS开发19-iOS CALayer的position和anchorPoint

来源:互联网 发布:魔方拼字软件 编辑:程序博客网 时间:2024/05/17 05:57

iOS开发19-iOS CALayer的position和anchorPoint



首先看几个概念:


frame:      该view在父view坐标系统中的位置和大小。(参照点是,父亲的坐标系统)


bounds:该view在本地坐标系统中的位置和大小。(参照点是,本地坐标系统,就相当于View自己的坐标系统,以0,0点为起点)


center:  该view的中心点在父view坐标系统中的位置和大小。(参照点是,父亲的坐标系统)


position就是anchorPoint在superLayer中的位置




把一张白纸用图钉订在书桌上,白纸可以旋转,这个图钉就是锚点。

图形围着锚点进行旋转缩放等。

锚点的位置在白纸上的坐标:

左上角,anchorPoint(0,0);右上角,anchorPoint(1,0);

中心点,anchorPoint(0.5,0.5);

左下角,anchorPoint(0,1);右下角,anchorPoint(1,1);

如图所示:


position和anchorPoint的关系


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


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


修改layer的position位置或者修改anchorPoint受影响的只会是frame.origin,也就是layer坐标原点相对superLayer会有所改变。

换句话说,frame.origin由position和anchorPoint共同决定



更改锚点,但是不更改Frame

如果需要修改anchorPoint,但又不想要移动layer也就是不想修改frame.origin,此时就要:

第一种方法:

position新位置 = position旧位置 + (anchorPoint新位置 - anchorPoint旧位置)  * bounds.size.width  


第二种方法:

有个更方便的方法。修改anchorPoint后再重新设置一遍frame就可以,position就会自动进行相应的改变。


  CGRect oldFrame = 旧的frame;//存储旧的frame
  view.layer.anchorPoint = 新的anchorpoint;//更新anchorpoint
  view.frame = oldFrame;//将frame改成旧的frame,此时position会根据frame和锚点来进行更新



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;



著作权声明:本文由http://my.csdn.net/Nathan1987_原创,欢迎转载分享。请尊重作者劳动,转载时保留该声明和作者博客链接,谢谢

0 0
原创粉丝点击