IOS 最全动画教程(基础)

大家好,做了这么久的iOS开发,没有系统性的总结过iOS某方面的知识点,总觉得有些地方还是不太了解,查阅各种资料,加上平时开发的经验,因此准备写关于动画系列的总结。作为开发者,我希望大家能尽可能的提高自己在APP动画方面的一些体验,多玩玩一些比较好的APP,在了解iOS动画的知识后,可以试着仿写一些动画设计。本教程的前半部分,我会大概介绍下IOS动画的整体框架,分为哪几个部分,好让开发者可以了解动画的大概,从一个过来人讲,动画在很多人的眼里,可能最明白的就是,将视图A从A点移动到B点,改变视图A的Frame。很多概念都很模糊,相信大家看了我的这个教程后,会走出动画方面的迷茫。后半部分的话,会以一些动画实例来演示如何利用我们的简单的动画组合起来实现一些复杂的动画效果。

UIView动画

1、UIView 类方法动画

[UIView beginAnimations:<#(nullable NSString *)#> context:<#(nullable void *)#>]
这行代码在UIViewUIViewAnimation分类里面,IOS2.0以上就已经支持了。鉴于目前UIView的动画实现基本都用Block方式实现,这里就不多叙述分类方法了。以免让大家更加混淆,增加学习动画的成本。

2、UIView Block动画

大家可以翻到UIView.h头文件里面去看一下,其中有个UIViewAnimationWithBlocks的分类,就是对UIViewBlock动画的扩展。

2.1 UIView属性动画的Block,提供了动画执行时间 duration,动画延时执行时间delay,动画执行Block代码块,已经动画完成回调block块completion。可以执行动画的属性有以下几种,

  • 大小变化(frame)
  • 拉伸变化(bounds)
  • 中心位置(center)
  • 旋转(transform)
  • 透明度(alpha)
  • 背景颜色(backgroundColor)
  • 拉伸内容(contentStretch)

对Block不熟悉的朋友可以去看下IOS Block相关知识。

+ (void)animateWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^ __nullable)(BOOL finished))completion

2.2 UIView弹簧动画的Block,iOS7.0后新增Spring动画(iOS系统动画大部分采用Spring Animation,适用于所有可被添加动画效果的属性)

    [UIView animateWithDuration:(NSTimeInterval)//动画持续时间delay:(NSTimeInterval)//动画延迟执行的时间usingSpringWithDamping:(CGFloat)//震动效果,范围0~1,数值越小震动效果越明显initialSpringVelocity:(CGFloat)//初始速度,数值越大初始速度越快options:(UIViewAnimationOptions)//动画的过渡效果animations:^{  //执行的动画  }  completion:^(BOOL finished) {  //动画执行完毕后的操作  }];

2.3 UIView关键帧动画Block,IOS7+

[UIView animateKeyframesWithDuration:(NSTimeInterval)//动画持续时间delay:(NSTimeInterval)//动画延迟执行的时间options:(UIViewKeyframeAnimationOptions)//动画的过渡效果animations:^{//执行的关键帧动画}completion:^(BOOL finished) {//动画执行完毕后的操作}];

2.4 UIView转场动画Block

  • 单个视图的转场动画
+ (void)transitionWithView:(UIView *)view duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options animations:(void (^ __nullable)(void))animations completion:(void (^ __nullable)(BOOL finished))completion
  • 从旧视图转到新视图的动画效果
+ (void)transitionFromView:(UIView *)fromView toView:(UIView *)toView duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options completion:(void (^ __nullable)(BOOL finished))completion

Core Animation 核心动画

Core Animation官方说明

IOS UI框架关系图

  • 从图中可以发现,最底层是硬件层,而我们最常用的UIKit框架层位于最顶部,下面有Core Animation 层,该层是作用于CALayer的。

Core Animation类图以及常用字段。

常用属性

  • duration : 动画的持续时间
  • beginTime : 动画的开始时间
  • repeatCount : 动画的重复次数
  • autoreverses : 执行的动画按照原动画返回执行
  • timingFunction : 控制动画的显示节奏系统提供五种值选择,分别是:
kCAMediaTimingFunctionLinear 线性动画
kCAMediaTimingFunctionEaseIn 先慢后快(慢进快出)
kCAMediaTimingFunctionEaseOut 先块后慢(快进慢出)
kCAMediaTimingFunctionEaseInEaseOut 先慢后快再慢
kCAMediaTimingFunctionDefault 默认,也属于中间比较快

path:关键帧动画中的执行路

type : 过渡动画的动画类型,系统提供了四种过渡动画。

kCATransitionFade 渐变效果
kCATransitionMoveIn 进入覆盖效果
kCATransitionPush 推出效果
kCATransitionReveal 揭露离开效果

subtype : 过渡动画的动画方向

kCATransitionFromRight 从右侧进入
kCATransitionFromLeft 从左侧进入
kCATransitionFromTop 从顶部进入
kCATransitionFromBottom 从底部进入

1.基础动画(CABasAnimation)

继承CAPropertyAnimation类,从名字来看就知道是属性动画,基础动画主要提供了对于CALayer对象中的可变属性进行简单动画的操作。比如:位移、透明度、缩放、旋转、背景色等等。

2.关键帧动画(CAKeyframeAnimation)

继承CAPropertyAnimation类,计算关键帧动画的类,属性有Values,path,keyTimes,timingFunctions,calculationMode,tensionValues,continuityValues,biasValues,rotationMode
CAKeyframeAnimationCApropertyAnimation的子类,跟CABasicAnimation的区别是:CABasicAnimation只能从一个数值fromValue变到另一个数值toValue,而CAKeyframeAnimation会使用一个NSArray保存这些数值。
属性分析:

  • values:就是上述的NSArray对象。里面的元素称为”关键帧”(keyframe)。动画对象会在指定的时间duration内,依次显示values数组中的每一个关键帧。
  • path:可以设置一个CGPathRef CGMutablePathRef,让层跟着路径移动。path只对CALayeranchorPointposition起作用。如果你设置了path,那么values将被忽略。
  • keyTimes:可以为对应的关键帧指定对应的时间点,其取值范围为0到1.0,keyTimes中的每一个时间值都对应values中的每一帧.当keyTimes没有设置的时候,各个关键帧的时间是平分的。

说明: CABasicAnimation可看做是最多只有2个关键帧的CAKeyframeAnimation

calculationMode常量

  • kCAAnimationLinear
  • kCAAnimationDiscrete
  • kCAAnimationPaced
  • kCAAnimationCubic
  • kCAAnimationCubicPaced

rotationMode常量

  • kCAAnimationRotateAuto
  • kCAAnimationRotateAutoReverse

3.组动画(CAAnimationGroup)

继承CAAnimation类,包含一系列动画子类的动画组,称为组合动画。
@property(nullable, copy) NSArray<CAAnimation *> *animations;
一个CAAnimation类型的动画数组,比如包含了基础动画里面的放大和颜色变化的动画或是位移变化的动画等。

4.过渡动画(CATransition)

继承CAAnimation类,称为过渡动画,过渡顾名思义就是视图之间的切换产生的动画,视图A切换到B,A会消失而现实B,这之间的动画就是过渡动画,这种情况也很多,比如在UIVContrller切换时候,每个控制器对应视图的切换动画。当往 UINavigationController里面push一个UIViewController时候,会产生从右往左的视图切换的动画效果,这个也称为过渡动画,当然我们是可以修改系统默认的push动画的方式的。属性有:type,subtype,startProgress,endProgress,filter

type 类型常量

  • kCATransitionFade
  • kCATransitionMoveIn
  • kCATransitionPush
  • kCATransitionReveal

subtypes 过渡类型常量

  • kCATransitionFromRight
  • kCATransitionFromLeft
  • kCATransitionFromTop
  • kCATransitionFromBottom

5.弹簧动画(CASpringAnimation)

继承CABasicAnimation 类,称为弹簧动画。IOS9+,属性有:

@property CGFloat mass; // 弹簧质量,必须大于0,默认值为1,(影响弹簧的惯性,质量越大,弹簧惯性越大,运动的幅度越大)
@property CGFloat stiffness;// 弹簧弹性系数,必须大于0,默认为100,(弹性系数越大,弹簧的运动越快)
@property CGFloat damping;// 弹簧阻尼系数,大于或等于0,默认为10,(阻尼系数越大,弹簧的停止越快)
@property CGFloat initialVelocity; // 初始速率(弹簧动画的初始速度大小,弹簧运动的初始方向与初始速率的正负一致,若初始速率为0,表示忽略该属性)
@property(readonly) CFTimeInterval settlingDuration; // 结算时间(根据动画参数估算弹簧开始运动到停止的时间,动画设置的时间最好根据此时间来设置)

CASpringAnimation和UIView的SpringAnimation对比:

  • CASpringAnimation 可以设置更多影响弹簧动画效果的属性,可以实现更复杂的弹簧动画效果,且可以和其他动画组合。
  • UIView的SpringAnimation实际上就是通过CASpringAnimation来实现。

以上就是IOS动画的简要介绍,不足的地方欢迎补充。最后附上几个比较好的帖子:

  1. IOS动画篇:核心动画
  2. IOS动画浅汇
  3. IOS开发UI篇–IOS动画(Core Animation)总结
  4. iOS动画学习总结

iOS 最全动画教程(基础)相关推荐

  1. iOS游戏框架Sprite Kit基础教程——Swift版上册

    iOS游戏框架Sprite Kit基础教程--Swift版上册 试读下载地址:http://pan.baidu.com/s/1qWBdV0C  介绍:本教程是国内唯一的Swift版的Spritekit ...

  2. 动画产业基础学习教程 Rad How to Class – Animation Industry Fundamentals

    如何分类--动画产业基础 大小解压后:6.2G 含课程素材 1920X1080 mp4 语言:英语+中英文字幕(根据原英文字幕机译更准确) 信息: 绘画技巧.解剖学.角色设计.透视和整体讲故事--这门 ...

  3. iOS学习——核心动画之Layer基础

    iOS学习--核心动画之Layer基础 1.CALayer是什么? CALayer我们又称它叫做层.在每个UIView内部都有一个layer这样一个属性,UIView之所以能够显示,就是因为它里面有这 ...

  4. iOS 9音频应用开发基础教程(大学霸内部资料)

    iOS 9音频应用开发基础教程(大学霸内部资料) 介绍:iOS 9音频应用开发基础教程(内部资料)是iOS 9音频应用开发专向教程.本书采用Swift 2.0语言开发基于iOS 9的音频应用.实现的功 ...

  5. swift语言注册非免费苹果账号iOS游戏框架Sprite Kit基础教程

    swift语言注册非免费苹果账号iOS游戏框架Sprite Kit基础教程 1.2.3  注册非免费苹果账号swift语言注册非免费苹果账号iOS游戏框架Sprite Kit基础教程 免费的苹果账号在 ...

  6. Swift版iOS游戏框架Sprite Kit基础教程下册

    Swift版iOS游戏框架Sprite Kit基础教程下册 试读下载地址:http://pan.baidu.com/s/1qWBdV0C  介绍:本教程是国内唯一的Swift版的Spritekit教程 ...

  7. iOS游戏框架Sprite Kit基础教程第1章编写第一个Sprite Kit程序

    iOS游戏框架Sprite Kit基础教程第1章编写第一个Sprite Kit程序 程序是为了实现特定目标或解决特定问题而用计算机语言编写的命令序列的集合.本章将以编写第一个Sprite Kit程序为 ...

  8. iOS最全打包IPA教程

    iOS最全打包IPA教程 导语 我秦汉三又开始回来写博客了,马上就会由一个中级iOS开发人员变成高级 iOS开发人员.主要是我和李汉三达成要成为行业大佬的协约,每周汇报两次,并根据汇报情况有奖惩.今天 ...

  9. IOS 初级开发入门教程(四)基础控件使用小练习

    前言 看完前面3章的内容,基本对IOS开发有一些认识了,这章我们开始动手去实践做点小练习,学习如何创建并设置标签和按钮(Label & Button)的相关属性,以及通过一个交互式的案例演示动 ...

最新文章

  1. 用wget循环获取指定url下的文件
  2. 1个ieee1394端口_ieee1394接口是什么及作用
  3. 浅谈-LINUX 操作系统启动过程
  4. Redis登陆服务器和批量删除指定的key
  5. cv mat保存图片_EmguCV创建/保存图片
  6. 如何通过网页方式将jar包上传到nexus?
  7. Java 多线程编程两个简单的例子
  8. could not find driver
  9. 路由器与交换机的区别?
  10. win7 安装IE11 教程
  11. 剑桥2021计算机专业,2021剑桥大学计算机专业录取条件出炉 你有信心过线吗
  12. 高通骁龙600系列处理器
  13. 利用python画爱心表白
  14. MATLAB中 分数化简
  15. tsc HPET kvm-clock
  16. 中兴二面(综合面试及口语测评)
  17. JavaScript(三)js插件
  18. [漏洞分析] CVE-2022-0847 Dirty Pipe linux内核提权分析
  19. 新概念二-非谓语动词
  20. 东师《近代物理实验》离线作业网考

热门文章

  1. 我们无法驱散雾霾,但能教会你正确选戴口罩!
  2. SQLi-Labs 学习笔记(Less 31-40)
  3. bugfree 检测不到mysql_安装bugfree时,提示Mysql未安装,找了网上的方法更改代码,但是还没有得到解决,怎么办?...
  4. 使用又拍云加速你的静态网站
  5. java 聊天室系统实训总结_Java聊天系统实训报告.doc
  6. [杂谈] 记 程序员 对抗失眠烦恼的 大法
  7. kickstarter衆籌
  8. GPS数据处理 JAVA实现
  9. vue3+element-plus实现日历组件农历显示且带列表数据
  10. 牧师与魔鬼动作分离版