⛓ 串联多个 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
的自定义扩展方法,这些方法包含在框架中
File
-> Add Packages
https://github.com/PimCoumans/AnimationPlanner
粘贴到搜索栏中,然后点击 “Add Package”在 package.swift
中手动添加 AnimationPlanner 作为包依赖项,通过使用以下代码更新你的包定义:
dependencies: [
.package(name: "AnimationPlanner", url: "https://github.com/PimCoumans/AnimationPlanner.git", .branch("main"))
],
并使用 dependencies: ["AnimationPlanner"]
更新你的目标依赖项属性
虽然此 API 消除了在使用传统 UIView.animate...
调用时大量不必要的完成闭包嵌套,但项目永无止境,对于未来版本,我有以下计划
DispatchQueue.main.asyncAfter
的使用,目前用于为非 UIView
动画添加延迟或弥合步骤之间的差距。有任何反馈或建议吗?请告诉我! ✌🏻