iOS基本动画/关键帧动画/利用缓动函数实现物理动画效果

先说下基本动画部分

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

使用方法大致为:

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

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

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

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

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

 1 //设置原始画面
 2     UIView *showView               = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
 3     showView.layer.masksToBounds   = YES;
 4     showView.layer.cornerRadius    = 50.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(50, 300)];
16
17     //设置动画结束位置
18     showView.center = CGPointMake(50, 300);
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(0, 0, 100, 100)];
 3     showView.layer.masksToBounds   = YES;
 4     showView.layer.cornerRadius    = 50.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(100, 100)],
18                                  [NSValue valueWithCGPoint:CGPointMake(50, 150)],
19                                  [NSValue valueWithCGPoint:CGPointMake(200, 200)]];
20
21     //设置动画结束位置
22     showView.center = CGPointMake(200, 200);
23
24     //添加动画到layer层
25     [showView.layer addAnimation:keyFrameAnimation forKey:nil];

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

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

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

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

上代码:

 1 //设置原始画面
 2     UIView *showView               = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
 3     showView.layer.masksToBounds   = YES;
 4     showView.layer.cornerRadius    = 50.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(50, 300)
18                                                             func:BounceEaseOut
19                                                       frameCount:4.0f * 30];
20
21     //设置动画结束位置
22     showView.center = CGPointMake(50, 300);
23
24     //添加动画到layer层
25     [showView.layer addAnimation:keyFrameAnimation forKey:nil];
时间: 2024-08-24 02:53:20

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

用缓动函数模拟物理动画

1.缓动函数简介      <1>缓动函数的动画效果是建立在CALayer层级的关键帧动画基础之上 也就是说用普通的UIView的Animation是无法直接实现缓动函数 <2>缓动函数是一系列模拟物理效果(如抛物线)方程式的统称,用以计算给定两点之间的插值 <3>两点之间插的值越多,效果越好,但是会耗费更多的性能 <4>只有理解了缓动函数的原理才有可能写出自己想要的效果 学习来自:<极客学院>之 "用缓动函数模拟物理动画"

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

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

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

WPF中的动画——(四)缓动函数 缓动函数可以通过一系列公式模拟一些物理效果,如实地弹跳或其行为如同在弹簧上一样.它们一般应用在From/To/By动画上,可以使得其动画更加平滑. var widthAnimation = new DoubleAnimation()    {        From = 0,        To = 320,        Duration = TimeSpan.FromSeconds(1),        EasingFunction = new BackEa

缓动函数与关键帧动画

缓动函数与关键帧动画 缓动函数指定动画效果在执行时的速度,使其看起来更加真实. 现实物体照着一定节奏移动,并不是一开始就移动很快的.当我们打开抽屉时,首先会让它加速,然后慢下来.当某个东西往下掉时,首先是越掉越快,撞到地上后回弹,最终才又碰触地板. http://easings.net/zh-cn 缓动函数能让动画效果看起来更加真实:). iOS开发中,能用到缓动函数的地方就属于关键帧动画了,以下是我用关键帧动画做出来的模拟真实时钟效果的动画,效果相当逼真哦,只是这个gif图片的效果不好而已.

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

用xcode6新建工程后,直接导致不支持之前的Easing缓动函数的代码,经过修改后就可以正常使用了,虽然比不上POP高大上的动画,但用缓动函数的动画还是能够实现很复杂的效果的. 注:Easing缓动函数服务于关键帧动画,理解这一点很重要,需要你对CoreAnimation有着很深入的了解才能够用得得心应手 提供源码如下: Easing.h 与 Easing.m // // Easing.h // Easing // // Created by YouXianMing on 14-10-10.

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

(一)定义: 缓动函数:可以将自定义算术公式应用于动画 (二)为什么要用缓动函数: 您可能希望某一对象逼真地弹回或其行为像弹簧一样.您可以使用关键帧动画甚至 From/To/By 动画来大致模拟这些效果,但可能需要执行大量的工作,并且与使用算术公式相比动画的精确性将降低. (三)实例讲解: 1 <UserControl x:Class="AnimationStudy.EasingFunctionAnimation" 2 xmlns="http://schemas.mic

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

上一篇讲了JS动画定时器相关知识,这一篇介绍下缓动函数及流行的动画库. 熟悉的图 实际使用 jquery animate()+jquery.easing插件的使用: $(selector).animate(styles,speed,easing,callback) 原生js使用:张鑫旭同学的文章 缓动函数知识 什么是缓动函数?我的理解是动画参数与数学公式结合的函数. 各流行库缓动函数对比,以easeInQuad为例,如图: Tween.js jQuery.easing GSAP CreateJS

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

封装缓动(变速)动画函数---增加任意多个属性&增加回调函数 回掉函数fn,在所有元素到达目的位置后,判断是否传入一个函数,有就调用 if(fn){fn()}; 这样一次点击,产生多个动画 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>title</title> <style> *

div盒子的缓动函数封装

1.2.  缓动动画 1.2.1.       原理公式 动画公式 leader = leader + step 匀速动画公式 step = 定值 leader = leader + step 缓动动画公式 step = ( target - leader ) / 10 leader = leader + step 缓动动画的好处 他的移动是有尽头的.不像基础匀速运动那样无限移动. 有非常逼真的缓动效果,实现的动画效果更细腻. 如果不清除定时器,物体永远跟着目标leader在移动. @体验缓动动