iOS基本动画/关键帧动画/利用缓动函数实现物理动画效果
先说下基本动画部分
基本动画部分比较简单, 但能实现的动画效果也很局限
使用方法大致为:
#1. 创建原始UI或者画面
#2. 创建CABasicAnimation实例, 并设置keypart/duration/fromValue/toValue
#3. 设置动画最终停留的位置
#4. 将配置好的动画添加到layer层中
举个例子, 比如实现一个圆形从上往下移动, 上代码:
- //设置原始画面
- UIView *showView = [[UIView alloc] initWithFrame:CGRectMake(, , , )];
- showView.layer.masksToBounds = YES;
- showView.layer.cornerRadius = .f;
- showView.layer.backgroundColor = [UIColor redColor].CGColor;
- [self.view addSubview:showView];
- //创建基本动画
- CABasicAnimation *basicAnimation = [CABasicAnimation animation];
- //设置属性
- basicAnimation.keyPath = @"position";
- basicAnimation.duration = 4.0f;
- basicAnimation.fromValue = [NSValue valueWithCGPoint:showView.center];
- basicAnimation.toValue = [NSValue valueWithCGPoint:CGPointMake(, )];
- //设置动画结束位置
- showView.center = CGPointMake(, );
- //添加动画到layer层
- [showView.layer addAnimation:basicAnimation forKey:nil];
接下来说下关键帧动画
其实跟基本动画差不多, 只是能设置多个动画路径 使用方法也类似, 大致为
#1. 创建原始UI或者画面
#2. 创建CAKeyframeAnimation实例, 并设置keypart/duration/values 相比基本动画只能设置开始和结束点, 关键帧动画能添加多个动画路径点
#3. 设置动画最终停留的位置
#4. 将配置好的动画添加到layer层中
举个例子, 红色圆形左右晃动往下坠落 上代码:
- //设置原始画面
- UIView *showView = [[UIView alloc] initWithFrame:CGRectMake(, , , )];
- showView.layer.masksToBounds = YES;
- showView.layer.cornerRadius = .f;
- showView.layer.backgroundColor = [UIColor redColor].CGColor;
- [self.view addSubview:showView];
- //创建关键帧动画
- CAKeyframeAnimation *keyFrameAnimation = [CAKeyframeAnimation animation];
- //设置动画属性
- keyFrameAnimation.keyPath = @"position";
- keyFrameAnimation.duration = 4.0f;
- keyFrameAnimation.values = @[[NSValue valueWithCGPoint:showView.center],
- [NSValue valueWithCGPoint:CGPointMake(, )],
- [NSValue valueWithCGPoint:CGPointMake(, )],
- [NSValue valueWithCGPoint:CGPointMake(, )]];
- //设置动画结束位置
- showView.center = CGPointMake(, );
- //添加动画到layer层
- [showView.layer addAnimation:keyFrameAnimation forKey:nil];
最后是利用缓动函数配合关键帧动画实现比较复杂的物理性动画
先说说什么是缓动函数, 就是有高人写了一个库可以计算出模拟物理性动画(比如弹簧效果)所要的路径
Github地址: https://github.com/YouXianMing/EasingAnimation
具体有哪些动画效果可看库中的缓动函数查询表, 简单举个小球落地的效果
上代码:
- //设置原始画面
- UIView *showView = [[UIView alloc] initWithFrame:CGRectMake(, , , )];
- showView.layer.masksToBounds = YES;
- showView.layer.cornerRadius = .f;
- showView.layer.backgroundColor = [UIColor redColor].CGColor;
- [self.view addSubview:showView];
- //创建关键帧动画
- CAKeyframeAnimation *keyFrameAnimation = [CAKeyframeAnimation animation];
- //设置动画属性
- keyFrameAnimation.keyPath = @"position";
- keyFrameAnimation.duration = 4.0f;
//关键处, 在这里使用的缓动函数计算点路径- keyFrameAnimation.values = [YXEasing calculateFrameFromPoint:showView.center
- toPoint:CGPointMake(, )
- func:BounceEaseOut
- frameCount:4.0f * ];
- //设置动画结束位置
- showView.center = CGPointMake(, );
- //添加动画到layer层
- [showView.layer addAnimation:keyFrameAnimation forKey:nil];
iOS基本动画/关键帧动画/利用缓动函数实现物理动画效果的更多相关文章
- WPF中的动画——(四)缓动函数
缓动函数可以通过一系列公式模拟一些物理效果,如实地弹跳或其行为如同在弹簧上一样.它们一般应用在From/To/By动画上,可以使得其动画更加平滑. var widthAnimation = new D ...
- 支持xcode6的缓动函数Easing以及使用示例
支持xcode6的缓动函数Easing以及使用示例 用xcode6新建工程后,直接导致不支持之前的Easing缓动函数的代码,经过修改后就可以正常使用了,虽然比不上POP高大上的动画,但用缓动函数的动 ...
- tween.js缓动(补间动画)
一.理解tween.js 如果看到上面的已经理解了,可以跳过下面的部分.下面为对Tween.js的解释 下面就介绍如何使用这个Tween了,首先b.c.d三个参数(即初始值,变化量,持续时间)在缓动开 ...
- Silverlight动画学习笔记(三):缓动函数
(一)定义: 缓动函数:可以将自定义算术公式应用于动画 (二)为什么要用缓动函数: 您可能希望某一对象逼真地弹回或其行为像弹簧一样.您可以使用关键帧动画甚至 From/To/By 动画来大致模拟这些效 ...
- JS---最终版本--封装缓动(变速)动画函数---增加任意多个属性&回调函数&层级&透明度
封装缓动(变速)动画函数---增加任意多个属性&回调函数&层级&透明度 相较之前的,增加了2个判断,第一个判断是不是透明度,第二个判断是不是zindex, 都不是,就只是普通属 ...
- JS---封装缓动(变速)动画函数---增加任意多个属性&增加回调函数
封装缓动(变速)动画函数---增加任意多个属性&增加回调函数 回掉函数fn,在所有元素到达目的位置后,判断是否传入一个函数,有就调用 if(fn){fn()}; 这样一次点击,产生多个动画 & ...
- JS动画之缓动函数分析及动画库
上一篇讲了JS动画定时器相关知识,这一篇介绍下缓动函数及流行的动画库. 熟悉的图 实际使用 jquery animate()+jquery.easing插件的使用: $(selector).anima ...
- EaseType 缓动函数
EaseType(动画曲线) EaseType 缓动函数或者我习惯叫它动画曲线,在很多的软件或动画中都有涉及到,下面是摘取的一些资料: 缓函数图例 Tween效果 每一幅图像当鼠标移上去,会有路径效果 ...
- NGUI缓动函数
缓动函数:http://easings.net/zh-cn 研究NGUI的博客:http://dsqiu.iteye.com/category/295721
随机推荐
- Qt MVC(模型-视图-代理)
实习刚才是一段时间,公司这边就要求熟悉这个mvc.一般开始都是用tableview,前面的blog我都是使用listview居多,并且相对delegate这个使用的多余model.接下来说下model ...
- ubuntu搜不到wifi信号
很多人刚刚装完ubuntu发现搜不到wifi信号,输入命令查看配置发现没有无线网卡驱动, 其实ubuntu是可以自动识别无线网卡自动安装驱动的,此时只需输入命令更新一下即可, 连上有线网,在终端输入此 ...
- c# DataTable 转为 List 类型
代码: public class ModelConvertHelper<T> where T : new() { public static IList<T> ConvertT ...
- Android Studio Gradle 问题 解决方案
将AS2.0升到2.1.3出现的问题: Error:No service of type Factory available in ProjectScopeServices. 在项目中找到build ...
- HttpURLConnection 文件上传限制
一. 问题 最近在Android程序里上传向.Net服务器上传大文件的时候,发现了一个问题.当上传大文件的时候会爆出OutOfMemoryError,上传小文件则没有这种情况. 二. ...
- Redis多机常用架构-sentinel
哨兵经典架构 sentinel结构 哨兵工作原理 Sentinel 通过配置文件发现Master,如下: Sentinel 通过向Master发送 INFO 命令来自动获得所有Slave的地址 跟Ma ...
- 第三章 文件IO复习
open(const char * path, int flag.../*mode_t*/) #include <fcntl.h> path:绝对路径 flag:O_RDONL ...
- 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 执行 ...
- Font Awesome图标库
Font Awesome 是一个非常方便的图标库.这些图标都是矢量图形,被保存在 .svg 的文件格式中.这些图标就和字体一样,你可以通过像素单位指定它们的大小,它们将会继承其父HTML元素的字体大小 ...
- 做WP程序时遇到的一些问题及解决方法
问题1:Type 'JDBYSJ.Data.NewsChannel' cannot be serialized. Consider marking it with the DataContractAt ...