缓动函数与关键帧动画

缓动函数与关键帧动画

缓动函数指定动画效果在执行时的速度,使其看起来更加真实。

现实物体照着一定节奏移动,并不是一开始就移动很快的。当我们打开抽屉时,首先会让它加速,然后慢下来。当某个东西往下掉时,首先是越掉越快,撞到地上后回弹,最终才又碰触地板。

http://easings.net/zh-cn

缓动函数能让动画效果看起来更加真实:).

 

iOS开发中,能用到缓动函数的地方就属于关键帧动画了,以下是我用关键帧动画做出来的模拟真实时钟效果的动画,效果相当逼真哦,只是这个gif图片的效果不好而已.

- (void)viewDidLoad
{
    [super viewDidLoad];

    // 显示参考用的view
    UIView *showView = [[UIView alloc] initWithFrame:CGRectMake(0, 20, 300, 300)];
    showView.layer.borderWidth = 1.f;
    showView.layer.cornerRadius = 150.f;
    showView.layer.borderColor = [UIColor redColor].CGColor;
    showView.center = self.view.center;
    [self.view addSubview:showView];

    // 新建layer
    CALayer *layer = [CALayer layer];
    layer.backgroundColor = [UIColor blackColor].CGColor;

    // 重置锚点
    layer.anchorPoint = CGPointMake(0.f, 0.f);

    // 设置layer的frame值(在showView正中间摆放)
    layer.frame = CGRectMake(showView.middleX, showView.middleY, 1, 150);

    // 添加进showView中
    [showView.layer addSublayer:layer];

    // 定时器
    _timer = [[GCDTimer alloc] initInQueue:[GCDQueue mainQueue]];
    [_timer event:^{
        static int i = 1;

        // 计算好起始值,结束值
        CGFloat oldValue = DEGREES_TO_RADIANS((360/60.f) * i++);
        CGFloat newValue = DEGREES_TO_RADIANS((360/60.f) * i);

        // 关键帧动画
        CAKeyframeAnimation *animation = \
            [CAKeyframeAnimation animationWithKeyPath:@"transform.rotation.z"];

        // 设置值
        [animation setValues:[YXEasing calculateFrameFromValue:oldValue
                                                       toValue:newValue
                                                          func:ElasticEaseOut
                                                    frameCount:500]];
        // 设置持续时间
        animation.duration  = 0.5f;

        // 每秒增加的角度(设定结果值,在提交动画之前执行)
        layer.transform = \
        CATransform3DMakeRotation(newValue, 0.0, 0.0, 1.0);

        // 提交动画
        [layer addAnimation:animation forKey:nil];
    } timeInterval:NSEC_PER_SEC];
    [_timer start];
}

核心代码(设置值的地方为本人自己所写,需要你自己实现哦)

是不是很容易呢:)

 

小结:

其实,关键帧动画与基本动画类型没有什么区别,要说区别,那就是关键帧动画要比普通动画更强大,因为它能设置更多的值嘛,普通动画可以实现的效果都可以用关键帧动画替换哦.

 

 

时间: 2024-09-20 17:18:43

缓动函数与关键帧动画的相关文章

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

iOS基本动画/关键帧动画/利用缓动函数实现物理动画效果 先说下基本动画部分 基本动画部分比较简单, 但能实现的动画效果也很局限 使用方法大致为: #1. 创建原始UI或者画面 #2. 创建CABasicAnimation实例, 并设置keypart/duration/fromValue/toValue #3. 设置动画最终停留的位置 #4. 将配置好的动画添加到layer层中 举个例子, 比如实现一个圆形从上往下移动, 上代码: //设置原始画面 UIView *showView = [[UI

用缓动函数模拟物理动画

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

缓动函数requestAnimationFrame 更好的实现浏览器经动画_基础知识

写缓动函数用到requestAnimationFrame函数,之前了解过一些,但总觉得又不是很了解,所以翻译一篇老外的文章,以便学习分享. requestAnimationFrame是什么? 以前我们做动画需要一个定时器,每间隔多少毫秒就做出一些改变.现在有个好消息:浏览器厂商已经决定提供一个专门做动画的方法,即requestAnimationFrame(),而且基于浏览器的层面也能更好的进行优化.但是呢,这只是一个做动画的基础API,即不基于DOM元素的style变化,也不基于canvas,或

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

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

Flash AS中很实用的缓动函数

函数 //-------缓动函数----------- function MoveTo(mcName, mcX, mcY, a) {  mcName.onEnterFrame = function() {   mcName._x += (mcX-mcName._x)/a;   mcName._y += (mcY-mcName._y)/a;   if (mcX == mcName._x && mcY == mcName._y) {    delete (mcName.onEnterFrame

jquery缓动swing liner控制动画过程不同时刻的速度_jquery

jQuery效果函数(slideUp().fadeIn()等)和animation()函数都接收另一个用来控制动画过程的速度的参数,这就是缓动(easing),它确定了动画过程不同时刻的速度.例如,将一个元素移过页面的时候,可能让这个元素缓慢地开始移动,然后变得很快,最后随着动画的完成再次慢下来.给动画添加缓动,使得动画在视觉上更有趣且更有动态感. jQuery只包含了两个缓动方法:swing和linear.linear方法提供了一个稳定的动画,以使得动画的每个步骤都是相同的(例如,如果要让一个

WPF界面设计技巧(7)—模拟电梯升降的缓动动画

原文:WPF界面设计技巧(7)-模拟电梯升降的缓动动画     如同Flash一样,WPF的亮点之一也在于其擅于表现平滑的动画效果,但以移动动画来说,仅凭简单的起始位置.目标位置,所产生的动画仍会非常生硬,这种动画忽略了移动开始时的加速过程与移动结束时的减速过程.   WPF在关键帧动画中提供了样条内插(Spline)型的关键帧,用以控制变化的速率曲线,但这东西实在有些复杂,且不够形象化,我研究很久也没明白如何实现"缓入--缓出"的效果,随后我从一本经典牛X却鲜有人知的过时的Flash

Windows Phone开发(42):缓动动画

原文:Windows Phone开发(42):缓动动画 前面在讨论关键帧动画的时候,我有意把几个带缓动动画的关键帧动画忽略掉,如EasingColorKeyFrame.EasingDoubleKeyFrame和EasingPointKeyFrame,其实为数不多,就这么几个.因为我希统一放到这节课程来吹一下缓动函数. 所谓缓动函数,就是我们在代数里面说的函数,说白了嘛,就是根特定的函数规则,用输入的值算出最终值,使得动画在两个关键帧之间不再是均衡过度,而是带有加/减速或其他效果,当然,还要取决于

Windows Phone开发(39):漫谈关键帧动画上篇

原文:Windows Phone开发(39):漫谈关键帧动画上篇 尽管前面介绍的几种动画会让觉得很好玩了,但是,不知道你是否发现,在前面说到的一系列XXXAnimation中,都有一个共同点,那就是仅仅针对两个值的目标值之间产生动画,如果使用By,将在原值和加上By后的目标值之间进行动画处理:如果使用From,To,那就更好理解了,就是首尾两个值之间值的动画. 那么,如果我希望三个值呢?或者N多个值呢?每个值之间的时间间隔不一样呢?如果我还希望更复杂的动画效果呢?比如可以附加缓动函数的.显然,前