【iOS】缓动(easing)动画简介

学习文章

介绍

SwiftEasingAnimation.gif
关于In、Out、Inout的说明:
  • ease in : 加速度缓动
  • ease out: 减速度缓动
  • ease InOut:先加速度至50%,再减速度完成动画
方法介绍
  • Quad:二次方缓动
  • Cubic:三次方缓动
  • Quart:四次方缓动
  • Quint:五次方缓动
  • Sine:正弦曲线缓动
  • Expo:指数曲线缓动
  • Circ:圆形曲线的缓动
  • Elastic:指数衰减的正弦曲线缓动
  • Back:超过范围的三次方缓动
  • Bounce:指数衰减的反弹缓动
easing

源码

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        
        let timer: NSTimer = NSTimer.scheduledTimerWithTimeInterval(5, target: self, selector: "keyFrameAnimation", userInfo: nil, repeats: true)
        
        timer.fire()

    }
    
    func keyFrameAnimation() {
    
        frameValueAnimation()
        pointValueAnimation()
        sizeValueAnimation()
    }
    
    /**
     关键帧动画例子
     */
    func frameValueAnimation() {
    
        // 创建easing
        let easingValue = EasingValue(withFunction: .ElasticEaseInOut, frameCount: 120)
        
        // 创建关键帧动画
        let keyFrameAnimation = CAKeyframeAnimation(keyPath: "transform.rotation.z")
        keyFrameAnimation.values = easingValue.frameValueWith(fromValue: 0, toValue: M_PI)
        keyFrameAnimation.duration = 4
        
        // 创建layer + 执行动画
        let layer = CALayer()
        layer.frame = CGRect(x: 60, y: 60, width: 100, height: 100)
        layer.borderWidth = 1
//        layer.transform = CATransform3DMakeRotation(CGFloat(M_PI), 0, 0, 1)
        layer.addAnimation(keyFrameAnimation, forKey: nil)
        view.layer.addSublayer(layer)
    }
    
    /**
     关键帧点动画例子
     */
    func pointValueAnimation() {
    
        // 创建layer
        let layer = CALayer()
        layer.frame = CGRect(x: 60, y: 60, width: 100, height: 100)
        layer.borderWidth = 1
        
        // 创建easing
         let easingValue = ComplexEasingValue(withFunctionA: .LinearInterpolation, FunctionB: .BounceEaseOut, frameCount: 120)
        
        // 创建关键帧动画
        let keyFrameAnimation = CAKeyframeAnimation(keyPath: "position")
        keyFrameAnimation.values = easingValue.pointValueWith(fromPoint: layer.position, toPoint: view.center)
        keyFrameAnimation.duration = 2
//        layer.position = view.center
        
        // 执行动画
        layer.addAnimation(keyFrameAnimation, forKey: nil)
        view.layer.addSublayer(layer)
    }
    
    /**
     关键帧尺寸动画例子
     */
    func sizeValueAnimation() {
    
        // 创建layer
        let layer = CALayer()
        layer.frame = CGRect(x: 60, y: 60, width: 100, height: 100)
        layer.backgroundColor = UIColor.redColor().colorWithAlphaComponent(0.5).CGColor
        
        // 创建easing
        let easingValue = EasingValue(withFunction: .ElasticEaseInOut, frameCount: 120)
        
        // 创建关键帧动画
        let keyFrameAnimation = CAKeyframeAnimation(keyPath: "bounds.size")
        keyFrameAnimation.values = easingValue.sizeValueWith(fromSize: layer.bounds.size, toSize: CGSize(width: 150, height: 150))
        keyFrameAnimation.duration = 4
//        layer.bounds.size = CGSize(width: 150, height: 150)
        
        // 执行动画
        layer.addAnimation(keyFrameAnimation, forKey: nil)
        view.layer.addSublayer(layer)
    }


}

下载源码

SwiftEasingAnimation

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 迷于设计,沉于动效。由于笔者对动效交互很感兴趣,遂著此文。希望能对大家有一点帮助。动图较多,建议 Wifi 下浏览...
    求愚阅读 8,921评论 0 29
  • 看了很多视频、文章,最后却通通忘记了,别人的知识依旧是别人的,自己却什么都没获得。此系列文章旨在加深自己的印象,因...
    DCbryant阅读 4,101评论 0 2
  • 本文的主要目的是希望能给新手一些启发,在遇到转场动效相关工作时能够快速捋清头绪,希望能够写出可以直接让人拿来用...
    木鱼的鱼阅读 4,849评论 0 6
  • 1. Material Motion 动效(Motion),在材质设计中,顺畅柔美地表现空间关系、功能和目的。 W...
    逃亡的光子阅读 2,523评论 0 1
  • 1.歌曲导入itunes 如果没有 在音乐软件上下载 然后找到文件 拽到itunes里面就行了 2.选择喜欢的歌 ...
    林清莫阅读 3,690评论 0 0

友情链接更多精彩内容