CLayer的相关知识
来源:互联网 发布:迪卡侬14.9背包知乎 编辑:程序博客网 时间:2024/06/14 22:35
CALayer常用属性
- 隐式属性动画的本质是这些属性的变动默认隐含了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向左上角移动了
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
- CLayer的相关知识
- 相关reactjs的相关知识
- OPC的相关知识
- JDBC的相关知识
- 事务的相关知识
- 编译器的相关知识
- 编译器的相关知识
- OPC的相关知识
- IUnKnown的相关知识
- 噪音的相关知识
- xml的相关知识
- sql的相关知识
- JavaScript的相关知识
- 虚拟主机的相关知识
- 声音的相关知识
- 事务的相关知识
- RUP的相关知识
- 游标的相关知识
- 自定义圆角跟圆形组件
- 今日BBC
- GCD之dispatch_group_t
- 机器学习中precision和accuracy区别
- ImageView.ScaleType设置图解
- CLayer的相关知识
- ubuntu14.04计划任务无法执行
- Android即时通讯--仿QQ即时聊天:(二)闪屏页及登录页面的实现
- android Application类的详细介绍
- 职业规划
- 1019 General Palindromic Number
- ios 9.2xcode7.2下批量打渠道包
- 关于fork()函数父子进程之间的问题
- 算法导论第三版习题6.3