
Dance 动画库完全指南iOS 开发者不可错过的 UIViewPropertyAnimator 优雅封装【免费下载链接】DanceA radical elegant animation library for iOS.项目地址: https://gitcode.com/gh_mirrors/dance1/DanceDance 是一款专为 iOS 打造的开源动画库它以「激进且优雅」为设计理念将 iOS 10 引入的UIViewPropertyAnimator封装成一行行简洁易懂的 Swift 代码。无论你是刚入门 iOS 开发的初学者还是想摆脱冗长动画样板代码的老手这本 Dance 动画库完全指南都能帮你快速上手用最少的代码实现暂停、反向、拖拽进度等高级动画交互。为什么需要 Dance原生动画 API 的痛点苹果在 iOS 10 中带来了强大的UIViewPropertyAnimator它支持动画暂停、反向播放、实时进度拖拽是构建可交互动画的利器。但原生 API 的写法略显繁琐你需要手动持有 animator 对象、处理状态枚举、管理完成回调代码一多就容易失控。Dance 动画库的解决思路非常简单——把 animator 绑定到视图上通过view.dance直接操作动画对象随手可取、随处可控。整个框架只有一个核心文件 Dance.swift轻量到几乎零成本接入。第一步Dance 动画库的两种安装方法CocoaPods 一键安装在 Podfile 中加入一行依赖然后执行pod install即可platform :ios, 10.0 target ProjectName do use_frameworks! pod Dance end拖拽文件极速接入不想引入依赖管理工具直接把 Dance.swift 拖进你的 Xcode 工程并在目标文件顶部写上import Dance同样立即可用。这种「单文件零依赖」的设计对新手尤其友好随时可以翻看源码理解它的内部实现。第二步3 行代码创建第一个 iOS 动画Dance 的使用体验可以用「极简」来形容。看下面这段代码它让一个圆形视图在 2 秒内放大 1.5 倍、移动到屏幕中心并变为蓝色circle.dance.animate(duration: 2.0, curve: .easeInOut) { $0.transform CGAffineTransform(scaleX: 1.5, y: 1.5) $0.center self.view.center $0.backgroundColor .blue }.addCompletion { _ in self.view.backgroundColor .green }.start(after: 5.0)注意几个细节$0就是被动画的视图本身.addCompletion追加完成回调.start(after: 5.0)表示延迟 5 秒后再启动。创建、回调、启动一气呵成这就是 Dance 动画库最迷人的链式语法。完整的示例写法可以参考 DanceExample/ViewController.swift。第三步动画「遥控器」——暂停、启动、反向与进度控制Dance 最核心的价值在于动画创建后你可以像拿遥控器一样在任意位置通过circle.dance控制它。操作方法说明启动.start()/.start(after: 5.0)立即启动或延迟启动暂停.pause()/.pause(after: 5.0)冻结动画进度反向.reverse()/.isReversed true像倒放视频一样回放拖拽.setProgress(to: 0.5)/.progress 0.5跳到任意进度0~1收尾.finish(at: .current)提前结束并触发回调拖拽进度让动画跟着手指走setProgress(to:)是打造交互动效的利器。把 UISlider 的值直接映射到动画进度上就能实现「拖动滑块预览动画」的效果circle.dance.setProgress(to: slider.value)反向播放与完成回调.reverse()会像播放视频倒退一样回放动画而.addCompletion回调中的position参数会告诉你动画最终停在了.start、.end还是.current位置方便你据此更新 UI 状态。示例工程的 ViewController.swift 中对这两种能力有完整演示。4 种动画曲线从线性到弹簧效果Dance 动画库内置 4 种创建动画的方式覆盖日常绝大多数动效需求UIKit 内置曲线.easeInOut、.easeIn、.easeOut、.linear适合常规过渡弹簧物理效果animate(duration:dampingRatio:)dampingRatio 越接近 0 弹性越明显适合做弹跳感自定义贝塞尔曲线通过两个控制点controlPoint1/controlPoint2精确调制缓动节奏UITimingCurveProvider直接传入UISpringTimingParameters等系统对象获得最大自由度。对应实现都封装在 Dance.swift 中想要深挖原理的朋友可以直接阅读源码。进阶技巧约束动画与链式调用高效动画 Auto Layout 约束动画约束变化时传统做法是在动画块里调用self.view.layoutIfNeeded()这会把所有子视图都布局一遍。Dance 的解法更聪明只对当前视图及其子视图执行$0.layoutIfNeeded()能量消耗更低、帧率更稳。circle.dance.animate(duration: 2.0, curve: .easeInOut) { $0.layoutIfNeeded() }优雅的函数链式调用所有 Dance 方法都会返回自身因此可以连续书写circle.dance.animate(duration: 2.0, curve: .easeInOut) { ... } .addCompletion { ... } .start(after: 5.0)甚至能写出circle.dance.pause().setProgress(to: 0.25)这样的组合拳代码既短又直观。可动画属性一览这些都能动UIView 属性可以做的变化frame/bounds改变视图尺寸与位置center改变视图位置transform缩放、旋转、平移alpha透明度渐变backgroundColor背景色过渡contentStretch内容拉伸方式无论UILabel、UIButton还是自定义 UIView 子类只要是视图就能接入 Dance 动画库。容错调试Dance 的贴心之处Dance 的容错设计对新手格外友好——即使你误调了不存在的方法它也不会让 App 崩溃而是在控制台打印一行清晰提示** Dance Error: view with dance.tag tag does not have an active animation! **通过circle.dance.state.active/.inactive和circle.dance.tag可以随时查询动画状态、追踪是哪个视图出了问题调试体验远超原生 API。结语Dance 动画库用不到千行的代码把UIViewPropertyAnimator的复杂 API 打磨成了一套「所见即所得」的动画 DSL。无论你是想快速实现基础动效还是要构建暂停、反向、拖拽进度的高级交互动画它都能让代码更简洁、心智负担更低。如果你正在寻找一个优雅的 iOS 动画解决方案不妨把 Dance 加入你的工具箱试试看。【免费下载链接】DanceA radical elegant animation library for iOS.项目地址: https://gitcode.com/gh_mirrors/dance1/Dance创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考