图层的使用要点(CALayer)

A,图层和路径

基本图层 CALayer 动画的主角

形状图层 CAShapeLayer 绘制不规则图形

渐变图层 CAGradientLayer 颜色渐变、阴影

复制图层 CAReplicatorLayer 迭代复制同一个图层

基础动画 CABasicAnimation 位移、透明度、缩放、旋转

关键帧 CAKeyframeAnimation 路径、抖动、关键帧

组合动画 CAAnimationGroup 多个动画的结合

系统封装动画 CATransition 淡入淡出、推挤、解开、覆盖

放射变幻 CGAffineTransform 旋转缩放

 

 

 

CAAnimation

CAAnimation可分为四种:

1. CABasicAnimation 基本动画

通过设定起始点,终点,时间,动画会沿着你这设定点进行移动。可以看做特殊的CAKeyFrameAnimation

创建cabaseanimation 的方法,但是在最新的apple开发文档没有查到path到底有哪些,网上搜罗了一下,并猜测path跟layer中的属性字段是一致的如background

 

2. CAKeyframeAnimation 关键帧动画

Keyframe顾名思义就是关键点的frame,你可以通过设定CALayer的始点、中间关键点、终点的frame,时间,动画会沿你设定的轨迹进行移动 CAKeyframeAnimation 的一些比较重要的属性

2.1. path

这是一个 CGPathRef 对象,默认是空的,当我们创建好CAKeyframeAnimation的实例的时候,可以通过制定一个自己定义的path来让某一个物体按照这个路径进行动画。这个值默认是nil,当其被设定的时候values 这个属性就被覆盖。

2.2. values

一个数组,提供了一组关键帧的值,当使用path的 时候 values的值自动被忽略。

 

3. CAAnimationGroup 组合动画

  • Group也就是组合的意思,可以保存一组动画对象,将CAAnimationGroup对象加入图层后,组中所有动画对象可以同时并发运行
  • animations属性:用来保存一组动画对象的NSArray
  • 注意:默认情况下,一组动画对象是同时运行的,也 可以通过设置动画对象的beginTime属性来更改动画的开始时间,从而达到同步动画或是连续动画效果

 

4. CATransition 系统封装的过渡动画

UIViewAnimationTransition 声明过渡方向

UIViewAnimationTransitionFlipFromLeft 向左转动

UIViewAnimationTransitionFlipFromRight 向右转动

UIViewAnimationTransitionCurlUp 向上翻动

UIViewAnimationTransitionCurlDown 向下翻动

名称 CATransition.type过渡效果

kCATransitionFade //淡入淡出 (不支持过渡方向)

kCATransitionPush, //推挤

kCATransitionReveal //揭开

kCATransitionMoveIn //覆盖

Cube //立方体

SuckEffect //吮吸

OglFlip //翻转

rippleEffect //波纹

pageCurl //翻页

pageUnCurl //反翻页

cameraIrisHollowOpen //开镜头 相机镜头打开效果(不支持过渡方向)

cameraIrisHollowClose //关镜头 相机镜头打开效果(不支持过渡方向)

 

CAShapeLayer 太极圈

继承自CALayer,因此,可使用CALayer的所有属性。但是,CAShapeLayer需要和贝塞尔曲线配合使用才有意义。

关于UIBezierPath

path:表示路径,可以用贝塞尔曲线,也可以自定义路径

fillcolor:表示填充色

strokeColor:线条颜色

linewidth:线的宽度

strokeStart:stroke的起始点(0~1)

strokeEnd:stroke的结束点(0~1)

 

CAGradientLayer 隐身术,渐变术

继承calayer,主要用于处理颜色渐变的图层。主要有以下的Properties

@property(copy) NSArray colors   渐变颜色的数组,注意这几个数字在01之间单调递增。
@property CGPoint startPoint
映射locations中第一个位置,用单位向量表示,比如(00)表示从左上角开始变化。默认值是(0.5,0.0)。
@property CGPoint endPoint
映射locations中最后一个位置,用单位向量表示,比如(11)表示到右下角变化结束。默认值是(0.5,1.0)。
@property
(copy) NSString type 默认值是kCAGradientLayerAxial,表示按像素均匀变化。除了默认值也无其它选项。

 

CAReplicatorLayer 分身术

复制器图层(观音送给孙悟空的三根毫毛,吹一下就变成无数的猴子猴孙)

CAReplicatorLayer是一个容器层

复制自己子层的layer,并且复制的出来的layer和原来的子layer拥有相同的动效。然后通过设置一些属性,可以设置其偏移位置让其依次排列,也可以设置不同的触发时间这样就形成了动画的效果常用于做loading动画

 

名称   功能

instanceCount 要创建的副本个数(默认一个)

preservesDepth 是否将3D例子系统平面化到一个图层(默认NO)

instanceDelay 动画时间延迟。默认为0

instanceTransform 迭代图层的位置 CATransform3D对象(创建方法用:CATransform3DMakeRotation圆形排列,CATransform3DMakeTranslation水平排列)

instanceColor 颜色组件添加到实例k - 1产生的颜色实例的调制颜色k。清晰的颜色(默认不透明白色)

instanceRedOffset,instanceGreenOffset,instanceBlueOffset,instanceAlphaOffset 加到实例K-1的颜色的颜色分量,以产生实例k的调制颜色。默认为鲜明的色彩(无变化)。

  

B,view.layer 与view.layer.mask的区别

1)view.layer是只读的,因此不能直接通过等号赋值,而是通过addSublayer添加上去。view.layer.mask是通过等号执行赋值的

2)addSublayer:盖上去的图层(遮住就看不到下面的内容)

      mask:设置为 mask (遮住什么,下面的内容就显示出什么)view.layer.mask = layer

3)一个view之所以能让用户看到里面的内容,是因为默认情况下,mask 的frame是等于view的frame,并且mask 是有背景颜色,即背景颜色不等于[UIColor clearColor].CGColor;

因此需要看到view的内容需要满足两个前提要求:首先mask要有frame值,然后mask的背景颜色不为[UIColor clearColor].CGColor;

 

posted on 2017-04-10 13:15  mantou811  阅读(355)  评论(0编辑  收藏  举报

导航