傲视苍穹iOS《Objective-C》VIP专题iOS专题资源__系统知识点iOS && Android

iOS动画详解(学习动画看这一篇就够了)

2017-01-02  本文已影响3089人  vvkeep

一、基础知识

CAAnimation.png

二、CABasicAnimation

1. 动画的属性和解释
属性 解释
duration 动画的持续时间
repeatCount 动画持续次数
repeatDuration 设置动画的时间,在该时间内动画一直执行,不计次数
beginTime 指定动画开始的时间。从开始延迟几秒的话,设置为CACurrentMediaTime() + 秒数 的方式
timingFunction 设置动画的速度变化
fillMode 动画在开始和结束时的动作,默认值是 kCAFillModeRemoved
autoreverses 动画结束时是否执行逆动画
fromValue 所改变属性的起始值
toValue 所改变属性的结束时的值
byValue 所改变属性相同起始值的改变量
2.属性值的解释
 pathAnim.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)

kCAFillModeForwards :
动画开始之后layer的状态将保持在动画的最后一帧,而removedOnCompletion的默认属性值是 YES,所以为了使动画结束之后layer保持结束状态,应将removedOnCompletion设置为NO。
kCAFillModeBackwards :
将会立即执行动画的第一帧,不论是否设置了 beginTime属性。观察发现,设置该值,刚开始视图不见,还不知道应用在哪里。
kCAFillModeBoth
该值是 kCAFillModeForwards 和 kCAFillModeBackwards的组合状态
kCAFillModeRemoved
动画将在设置的 beginTime 开始执行(如没有设置beginTime属性,则动画立即执行),动画执行完成后将会layer的改变恢复原状。

3.使用心得

尽量不要设置removedOnCompletion = false ,因为配合CAAnimationDelegate会带来循环运用的问题,如果需要动画停留在最后的状态,可以直接设置View的center属性在动画结束的位置Point
之所以会出现 循环引用 因为由于CAAnimation的delegate使用的strong类型:看一下简要的说明图:


CAAnimationDelegate.png

解决有时视图会闪动一下的问题,我们可以将layer的属性值设置为我们的动画最后要达到的值,然后再给我们的视图添加layer动画。

4.样例展示
旋转动画.gif

*位移动画

位移动画.gif size大小缩放、透明值变化动画.gif
5.常用KeyPath总结
KeyPath值 说明 使用形式- swift 3.0
transform.scale 比例缩放 0.8
transform.scale.x 缩放宽的比例 0.8
transform.scale.y 缩放高的比例 0.8
transform.rotation.x 围绕x轴旋转 2 * M_PI
transform.rotation.y 围绕y轴旋转 2 * M_PI
transform.rotation.z 围绕z轴旋转 2 * M_PI
backgroundColor 背景颜色的变化 UIColor.red.cgColor
bounds 大小缩放,中心不变 NSValue(cgRect: CGRect(x: 800, y: 500, width: 90, height: 30))
position 位置(中心点的改变) NSValue(cgPoint: CGPoint(x: 40, y: 240))
contents 内容,比如UIImageView的图片 UIImage(named: "to")?.cgImage
opacity 透明度 0.4
contentsRect.size.width 横向拉伸缩放 0.6
contentsRect.size.height 纵向拉伸缩放 0.5

三、CAKeyframeAnimation

CAKeyframeAnimation是核心动画里面的帧动画,它提供了按照指定的一串值进行动画,好像拍电影一样的一帧一帧的效果

1. 属性解释
  1. kCAAnimationLinear calculationMode的默认值,r自定义控制动画的时间(线性)可以设置keyTimes,表示当关键帧为座标点的时候,关键帧之间直接直线相连进行插值计算;
  2. kCAAnimationDiscrete 离散的,就是不进行插值计算,所有关键帧直接逐个进行显示;
  3. kCAAnimationPaced 节奏动画自动计算动画的运动时间,使得动画均匀进行,而不是按keyTimes设置的或者按关键帧平分时间,此时keyTimes和timingFunctions无效;
  4. kCAAnimationCubic 对关键帧为座标点的关键帧进行圆滑曲线相连后插值计算,对于曲线的形状还可以通过tensionValues,continuityValues,biasValues来进行调整自定义,这里的数学原理是Kochanek–Bartels spline,这里的主要目的是使得运行的轨迹变得圆滑,曲线动画需要设置timingFunctions
  5. kCAAnimationCubicPaced 看这个名字就知道和kCAAnimationCubic有一定联系,其实就是在kCAAnimationCubic的基础上使得动画运行变得均匀,就是系统时间内运动的距离相同,此时keyTimes以及timingFunctions也是无效的.
  1. kCAAnimationRotateAuto 根据路径自动旋转
    2.kCAAnimationRotateAutoReverse 根据路径自动翻转
二. 样例展示
CAKeyframeAnimation路径动画.gif

三、CATransition

主要用于转场动画从一个场景以动画的形式过渡到另一个场景

一. 属性解释
系统公开API 效果说明 是否支持方向
kCATransitionFade 淡出效果
kCATransitionMoveIn 新视图移动到旧视图上
kCATransitionPush 新视图推出旧视图
kCATransitionReveal 移开旧视图显示新视图

** 另外还有一些系统未公开的动画效果**:

["cube", "suckEffect", "rippleEffect", "pageCurl", "pageUnCurl", "oglFlip", "cameraIrisHollowOpen",  "cameraIrisHollowClose", "spewEffect","genieEffect","unGenieEffect","twist","tubey","swirl","charminUltra", "zoomyIn", "zoomyOut", "oglApplicationSuspend"]

效果,就不一一列举了,可以看下效果图

动画子类型 说明
kCATransitionFromRight 从右侧转场
kCATransitionFromLeft 从左侧转场
kCATransitionFromTop 从顶部转场
kCATransitionFromBottom 从底部转场动画子类型
三、动画样例
CATransition路径动画.gif

四、CASpringAnimation

iOS9才引入的动画类,在以前我们都是使用facebook的pop来做这种弹簧效果,它继承于CABaseAnimation,用于制作弹簧动画

一、参数说明
二、例子展示
CASpringAnimation弹簧动画.gif

五、一些有意思的动画样例

fire动画.gif fish动画.gif

最后的最后,奉上文章里部分例子的Demo地址:exampleForAnimation

上一篇下一篇

猜你喜欢

热点阅读