Animation Planner logo

AnimationPlanner

⛓ 串联多个 UIView 动画,告别无休止的闭包嵌套。使用清晰简洁的语法,在同一缩进级别创建动画序列。

🤹 OK Video 📲 中所有精彩动画均使用它实现

📖 查看文档快速上手,或继续阅读以查看示例。

如何规划我的动画?

📦 将 AnimationPlanner 添加到你的项目(使用 Swift Package Manager),然后开始输入 AnimationPlanner.plan 以开始你的动画之旅。就像下面的代码所示。

AnimationPlanner.plan {
    Animate(duration: 0.32, timingFunction: .quintOut) {
        view.alpha = 1
        view.center.y = self.view.bounds.midY
    }
    Wait(0.2)
    Animate(duration: 0.32) {
        view.transform = CGAffineTransform(scaleX: 2, y: 2)
        view.layer.cornerRadius = 40
        view.backgroundColor = .systemRed
    }.timingFunction(.quintOut)
    Wait(0.2)
    AnimateSpring(duration: 0.25, dampingRatio: 0.52) {
        view.backgroundColor = .systemBlue
        view.layer.cornerRadius = 0
        view.transform = .identity
    }
    Wait(0.58)
    Animate(duration: 0.2) {
        view.alpha = 0
        view.transform = .identity
        view.frame.origin.y = self.view.bounds.maxY
    }.timingFunction(.circIn)
}.onComplete { finished in
    view.removeFromSuperview()
}

以上代码产生以下动画序列。更多示例请参见克隆 repo 后可用的示例 App

注意: 该示例使用了 CAMediaTimingFunction自定义扩展方法,这些方法包含在框架中

安装

🛠 将 AnimationPlanner 作为包依赖项添加

  1. 前往 File -> Add Packages
  2. https://github.com/PimCoumans/AnimationPlanner 粘贴到搜索栏中,然后点击 “Add Package”
  3. 选择要在其中使用 AnimationPlanner 的目标

📦 Swift Package Manager

package.swift 中手动添加 AnimationPlanner 作为包依赖项,通过使用以下代码更新你的包定义:

  dependencies: [
    .package(name: "AnimationPlanner", url: "https://github.com/PimCoumans/AnimationPlanner.git", .branch("main"))
  ],

并使用 dependencies: ["AnimationPlanner"] 更新你的目标依赖项属性

🔮 未来计划

虽然此 API 消除了在使用传统 UIView.animate... 调用时大量不必要的完成闭包嵌套,但项目永无止境,对于未来版本,我有以下计划

有任何反馈或建议吗?请告诉我! ✌🏻

twitter.com/pimcoumans