您的位置:首页 > 其它

CLayer的相关知识

2016-02-27 10:54 232 查看


CALayer常用属性

属性说明是否支持隐式动画
anchorPoint和中心点position重合的一个点,称为“锚点”,锚点的描述是相对于x、y位置比例而言的默认在图像中心点(0.5,0.5)的位置
backgroundColor图层背景颜色
borderColor边框颜色
borderWidth边框宽度
bounds图层大小
contents图层显示内容,例如可以将图片作为图层内容显示
contentsRect图层显示内容的大小和位置
cornerRadius圆角半径
doubleSided图层背面是否显示,默认为YES
frame图层大小和位置,不支持隐式动画,所以CALayer中很少使用frame,通常使用bounds和position代替
hidden是否隐藏
mask图层蒙版
maskToBounds子图层是否剪切图层边界,默认为NO
opacity透明度 ,类似于UIView的alpha
position图层中心点位置,类似于UIView的center
shadowColor阴影颜色
shadowOffset阴影偏移量
shadowOpacity阴影透明度,注意默认为0,如果设置阴影必须设置此属性
shadowPath阴影的形状
shadowRadius阴影模糊半径
sublayers子图层
sublayerTransform子图层形变
transform图层形变

隐式属性动画的本质是这些属性的变动默认隐含了CABasicAnimation动画实现,详情大家可以参照Xcode帮助文档中“Animatable Properties”一节。
在CALayer中很少使用frame属性,因为frame本身不支持动画效果,通常使用bounds和position代替。

CALayer中透明度使用opacity表示而不是alpha;中心点使用position表示而不是center。
anchorPoint属性是图层的锚点,范围在(0~1,0~1)表示在x、y轴的比例,这个点永远可以同position(中心点)重合当图层中心点固定后,调整anchorPoint即可达到调整图层显示位置的作用(因为它永远和position重合)

为了进一步说明anchorPoint的作用,假设有一个层大小100*100,现在中心点位置(50,50),由此可以得出frame(0,0,100,100)。上面说过anchorPoint默认为(0.5,0.5),同中心点position重合,此时使用图形描述如图1;当修改anchorPoint为(0,0),此时锚点处于图层左上角,但是中心点poition并不会改变,因此图层会向右下角移动,如图2;然后修改anchorPoint为(1,1,),position还是保持位置不变,锚点处于图层右下角,此时图层如图3。





################################
对于图一,我的理解是,首先根据bounds(0,0,0,100,100)确定layer的大小。然后设置position(50 , 50) 因为,position相当于center所以,就确定了layer在父layer中的位置。同时anchorPoint默认的值是(0.5,0.5)。对于图二和图三,首先要明白一条,position的位置不再改变。要移动layer的位置,改变的是anchorPoint的值。同时要记住的ancorPoint是和position重合的。也就是说anchorPoint称为"定位点",它决定着CALayer身上的哪个点会在position属性所指的位置

对于图一来说,layer的中心点落在position的位置。
对于图二来说,layer的左上角的点落在position的位置。
对于图三来说,layer的右下角的点落在position的位置。

它决定着CALayer身上的哪个点会在position所指定的位置上。它的x、y取值范围都是0~1,默认值为(0.5,
0.5),因此,默认情况下,CALayer的中点会在position所指定的位置上。

###############################

怎么position和anchorPoint来确定位置。

首先要清楚,UIView的frame属性是由center和bounds属性计算得到的。

frame.origin.x = center.x - bounds.size.width/2.0;

frame.origin.y = center.y - bounds.size.height/2.0;

frame.size = bounds.size;

相对的,身为UIView下级结构的CALayer呢?

CALayer的position(相当于center),bounds,anchorPoint是什么关系呢?

虽然没有frame,但是CALayer的显示(虚拟frame)也是由这些组件算出来的

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

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

frame.size = bounds.size;

所以,当我们在上面修改anchorPoint的时候,实际上修改了显示的运算元素!这样当anchorPoint修改为(1.0,1.0)的时候,经过重新运算,CALayer向左上角移动了

===================================

参考: http://blog.csdn.net/primer_programer/article/details/9904287 http://www.cnblogs.com/kenshincui/p/3972100.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: