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_原创,欢迎转载分享。请尊重作者劳动,转载时保留该声明和作者博客链接,谢谢