先说下基本动画部分

基本动画部分比较简单, 但能实现的动画效果也很局限

使用方法大致为:

#1. 创建原始UI或者画面

#2. 创建CABasicAnimation实例, 并设置keypart/duration/fromValue/toValue

#3. 设置动画最终停留的位置

#4. 将配置好的动画添加到layer层中

举个例子, 比如实现一个圆形从上往下移动, 上代码:

  1. //设置原始画面
  2. UIView *showView = [[UIView alloc] initWithFrame:CGRectMake(, , , )];
  3. showView.layer.masksToBounds = YES;
  4. showView.layer.cornerRadius = .f;
  5. showView.layer.backgroundColor = [UIColor redColor].CGColor;
  6. [self.view addSubview:showView];
  7.  
  8. //创建基本动画
  9. CABasicAnimation *basicAnimation = [CABasicAnimation animation];
  10.  
  11. //设置属性
  12. basicAnimation.keyPath = @"position";
  13. basicAnimation.duration = 4.0f;
  14. basicAnimation.fromValue = [NSValue valueWithCGPoint:showView.center];
  15. basicAnimation.toValue = [NSValue valueWithCGPoint:CGPointMake(, )];
  16.  
  17. //设置动画结束位置
  18. showView.center = CGPointMake(, );
  19.  
  20. //添加动画到layer层
  21. [showView.layer addAnimation:basicAnimation forKey:nil];

接下来说下关键帧动画

其实跟基本动画差不多, 只是能设置多个动画路径  使用方法也类似, 大致为

#1. 创建原始UI或者画面

#2. 创建CAKeyframeAnimation实例, 并设置keypart/duration/values 相比基本动画只能设置开始和结束点, 关键帧动画能添加多个动画路径点

#3. 设置动画最终停留的位置

#4. 将配置好的动画添加到layer层中

举个例子, 红色圆形左右晃动往下坠落 上代码:

  1. //设置原始画面
  2. UIView *showView = [[UIView alloc] initWithFrame:CGRectMake(, , , )];
  3. showView.layer.masksToBounds = YES;
  4. showView.layer.cornerRadius = .f;
  5. showView.layer.backgroundColor = [UIColor redColor].CGColor;
  6.  
  7. [self.view addSubview:showView];
  8.  
  9. //创建关键帧动画
  10. CAKeyframeAnimation *keyFrameAnimation = [CAKeyframeAnimation animation];
  11.  
  12. //设置动画属性
  13. keyFrameAnimation.keyPath = @"position";
  14. keyFrameAnimation.duration = 4.0f;
  15.  
  16. keyFrameAnimation.values = @[[NSValue valueWithCGPoint:showView.center],
  17. [NSValue valueWithCGPoint:CGPointMake(, )],
  18. [NSValue valueWithCGPoint:CGPointMake(, )],
  19. [NSValue valueWithCGPoint:CGPointMake(, )]];
  20.  
  21. //设置动画结束位置
  22. showView.center = CGPointMake(, );
  23.  
  24. //添加动画到layer层
  25. [showView.layer addAnimation:keyFrameAnimation forKey:nil];

最后是利用缓动函数配合关键帧动画实现比较复杂的物理性动画

先说说什么是缓动函数, 就是有高人写了一个库可以计算出模拟物理性动画(比如弹簧效果)所要的路径

Github地址: https://github.com/YouXianMing/EasingAnimation

具体有哪些动画效果可看库中的缓动函数查询表, 简单举个小球落地的效果

上代码:

  1. //设置原始画面
  2. UIView *showView = [[UIView alloc] initWithFrame:CGRectMake(, , , )];
  3. showView.layer.masksToBounds = YES;
  4. showView.layer.cornerRadius = .f;
  5. showView.layer.backgroundColor = [UIColor redColor].CGColor;
  6.  
  7. [self.view addSubview:showView];
  8.  
  9. //创建关键帧动画
  10. CAKeyframeAnimation *keyFrameAnimation = [CAKeyframeAnimation animation];
  11.  
  12. //设置动画属性
  13. keyFrameAnimation.keyPath = @"position";
  14. keyFrameAnimation.duration = 4.0f;

  15.     //关键处, 在这里使用的缓动函数计算点路径
  16. keyFrameAnimation.values = [YXEasing calculateFrameFromPoint:showView.center
  17. toPoint:CGPointMake(, )
  18. func:BounceEaseOut
  19. frameCount:4.0f * ];
  20.  
  21. //设置动画结束位置
  22. showView.center = CGPointMake(, );
  23.  
  24. //添加动画到layer层
  25. [showView.layer addAnimation:keyFrameAnimation forKey:nil];

iOS基本动画/关键帧动画/利用缓动函数实现物理动画效果的更多相关文章

  1. WPF中的动画——(四)缓动函数

    缓动函数可以通过一系列公式模拟一些物理效果,如实地弹跳或其行为如同在弹簧上一样.它们一般应用在From/To/By动画上,可以使得其动画更加平滑. var widthAnimation = new D ...

  2. 支持xcode6的缓动函数Easing以及使用示例

    支持xcode6的缓动函数Easing以及使用示例 用xcode6新建工程后,直接导致不支持之前的Easing缓动函数的代码,经过修改后就可以正常使用了,虽然比不上POP高大上的动画,但用缓动函数的动 ...

  3. tween.js缓动(补间动画)

    一.理解tween.js 如果看到上面的已经理解了,可以跳过下面的部分.下面为对Tween.js的解释 下面就介绍如何使用这个Tween了,首先b.c.d三个参数(即初始值,变化量,持续时间)在缓动开 ...

  4. Silverlight动画学习笔记(三):缓动函数

    (一)定义: 缓动函数:可以将自定义算术公式应用于动画 (二)为什么要用缓动函数: 您可能希望某一对象逼真地弹回或其行为像弹簧一样.您可以使用关键帧动画甚至 From/To/By 动画来大致模拟这些效 ...

  5. JS---最终版本--封装缓动(变速)动画函数---增加任意多个属性&回调函数&层级&透明度

    封装缓动(变速)动画函数---增加任意多个属性&回调函数&层级&透明度 相较之前的,增加了2个判断,第一个判断是不是透明度,第二个判断是不是zindex, 都不是,就只是普通属 ...

  6. JS---封装缓动(变速)动画函数---增加任意多个属性&增加回调函数

    封装缓动(变速)动画函数---增加任意多个属性&增加回调函数 回掉函数fn,在所有元素到达目的位置后,判断是否传入一个函数,有就调用 if(fn){fn()}; 这样一次点击,产生多个动画 & ...

  7. JS动画之缓动函数分析及动画库

    上一篇讲了JS动画定时器相关知识,这一篇介绍下缓动函数及流行的动画库. 熟悉的图 实际使用 jquery animate()+jquery.easing插件的使用: $(selector).anima ...

  8. EaseType 缓动函数

    EaseType(动画曲线) EaseType 缓动函数或者我习惯叫它动画曲线,在很多的软件或动画中都有涉及到,下面是摘取的一些资料: 缓函数图例 Tween效果 每一幅图像当鼠标移上去,会有路径效果 ...

  9. NGUI缓动函数

    缓动函数:http://easings.net/zh-cn 研究NGUI的博客:http://dsqiu.iteye.com/category/295721

随机推荐

  1. Qt MVC(模型-视图-代理)

    实习刚才是一段时间,公司这边就要求熟悉这个mvc.一般开始都是用tableview,前面的blog我都是使用listview居多,并且相对delegate这个使用的多余model.接下来说下model ...

  2. ubuntu搜不到wifi信号

    很多人刚刚装完ubuntu发现搜不到wifi信号,输入命令查看配置发现没有无线网卡驱动, 其实ubuntu是可以自动识别无线网卡自动安装驱动的,此时只需输入命令更新一下即可, 连上有线网,在终端输入此 ...

  3. c# DataTable 转为 List 类型

    代码: public class ModelConvertHelper<T> where T : new() { public static IList<T> ConvertT ...

  4. Android Studio Gradle 问题 解决方案

    将AS2.0升到2.1.3出现的问题: Error:No service of type Factory  available in ProjectScopeServices. 在项目中找到build ...

  5. HttpURLConnection 文件上传限制

    一.      问题 最近在Android程序里上传向.Net服务器上传大文件的时候,发现了一个问题.当上传大文件的时候会爆出OutOfMemoryError,上传小文件则没有这种情况. 二.     ...

  6. Redis多机常用架构-sentinel

    哨兵经典架构 sentinel结构 哨兵工作原理 Sentinel 通过配置文件发现Master,如下: Sentinel 通过向Master发送 INFO 命令来自动获得所有Slave的地址 跟Ma ...

  7. 第三章 文件IO复习

          open(const char * path, int flag.../*mode_t*/) #include <fcntl.h> path:绝对路径 flag:O_RDONL ...

  8. jboss [how to access the admin console]

    However you have not yet added any users to be able to access the admin console. 进入%EAP_HOME%/bin 执行 ...

  9. Font Awesome图标库

    Font Awesome 是一个非常方便的图标库.这些图标都是矢量图形,被保存在 .svg 的文件格式中.这些图标就和字体一样,你可以通过像素单位指定它们的大小,它们将会继承其父HTML元素的字体大小 ...

  10. 做WP程序时遇到的一些问题及解决方法

    问题1:Type 'JDBYSJ.Data.NewsChannel' cannot be serialized. Consider marking it with the DataContractAt ...