CLayer的相关知识

来源:互联网 发布:迪卡侬14.9背包知乎 编辑:程序博客网 时间:2024/06/14 22:35

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。

anchorPoint


################################
对于图一,我的理解是,首先根据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



0 0
原创粉丝点击