ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

Dance 完成回调指南:addCompletion 实现动画结束联动的 5 个技巧

Dance 完成回调指南:addCompletion 实现动画结束联动的 5 个技巧 Dance 完成回调指南addCompletion 实现动画结束联动的 5 个技巧【免费下载链接】DanceA radical elegant animation library for iOS.项目地址: https://gitcode.com/gh_mirrors/dance1/Dance在 iOS 动画开发中Dance 完成回调addCompletion是让动画结束联动界面与业务逻辑的关键能力。Dance 是一款基于 UIViewPropertyAnimator 构建的优雅动画库它把复杂的动画状态管理封装成一行链式调用而 addCompletion 则负责在动画结束时精准通知你。本文用 5 个实战技巧带你彻底掌握 Dance 动画库的结束联动写法。addCompletion 是什么快速理解 Dance 完成回调 Dance 的核心哲学是宽容且优雅。你只需用view.dance.animate { ... }声明动画再通过addCompletion { ... }注册完成回调动画结束时系统就会自动执行回调里的代码。每次动画结束无论是自然播完还是被手动终止所有完成回调都会被触发。回调闭包会收到一个UIViewAnimatingPosition参数告诉你动画最终停在了哪个位置它们的含义如下position 值含义常见场景.start动画停在起始位置反转后回到原点.current动画停在当前进度用户中断后手动收尾.end动画到达目标值动画完整播完技巧 1链式调用一行注册动画完成回调 ⛓️Dance 最让人舒服的地方就是可以把声明动画 注册回调 启动写成一条链circle.dance.animate(duration: 2.0, curve: .easeInOut) { $0.transform CGAffineTransform(scaleX: 1.5, y: 1.5) $0.backgroundColor .blue }.addCompletion { _ in self.view.backgroundColor .green }.start()代码从左到右读下来就是完整的故事先定义动画目标再声明播完以后把背景变绿最后启动。没有代理方法、没有 delegate 回调可读性直接拉满。技巧 2用结束位置参数实现精准分支联动 动画不一定每次都完整跑完——它可能被暂停后手动结束也可能被反转。此时回调里的 position 参数就派上用场了circle.dance.addCompletion { position in switch position { case .start: print(动画停在起点) case .current: print(动画停在当前位置) case .end: print(动画到达终点) } }比如只有动画完整到达终点才弹窗提示这种业务用.end分支判断即可一个 switch 搞定。技巧 3叠加多个完成回调实现多重联动 Dance 允许你为同一个动画注册任意多个完成回调它们都会在动画结束时依次触发。这让动画结束后同时刷新 UI 上报统计 播放音效这类多重联动变得非常自然circle.dance.animate(duration: 2.0, curve: .easeInOut) { $0.center self.view.center } .addCompletion { _ in self.refreshUI() // 联动 1刷新界面 } .addCompletion { _ in self.logEvent() // 联动 2埋点统计 } .start()⚠️ 注意动画一旦结束finish就不能再追加完成回调所以回调尽量在动画启动前注册完。技巧 4配合 finish(at:) 手动触发结束联动 ️交互型动画经常需要用户拖动松手后立即收尾。此时可以调用finish(at:)手动结束动画它会立刻把视图渲染到指定位置并立即触发所有完成回调circle.dance.finish(at: .current) // 或 .start / .end这招特别适合拖拽、滑动等手势交互松手瞬间决定动画落点同时联动后续逻辑体验流畅又可控。技巧 5反转动画中的完成回调位置判断 用.reverse()把动画倒着播时位置语义会跟着反转如果视图最终回到初始位置回调里的 position 是.start而不是.end。理解了这一点反转动画的联动判断就不会踩坑circle.dance.reverse() // 动画倒放结束后position 反映的是最终相对起点/终点的位置如果需要在反转后仍能准确联动建议在回调里结合dance.isReversed属性做二次判断。附源码与示例参考 Dance 的addCompletion完整实现位于Dance.swift的Dance类中方法签名与注释非常详细建议结合源码阅读示例工程DanceExample/ViewController.swift里包含了完成回调与暂停、反转、进度拖拽联动的完整演示更多可动画属性frame、center、transform、alpha 等与函数链式调用说明见项目根目录README.md想上手体验可以直接克隆仓库git clone https://gitcode.com/gh_mirrors/dance1/Dance总结 ✨Dance 完成回调addCompletion的 5 个技巧可以浓缩成一句话链式注册、位置分支、多回调叠加、finish 手动触发、反转语义判断。掌握它们你就能在动画结束瞬间精准联动任何界面与逻辑。配合 Dance 的暂停、反转、进度拖拽能力再复杂的交互动画也能写得简洁优雅赶紧在你的下一个 iOS 项目里试试吧【免费下载链接】DanceA radical elegant animation library for iOS.项目地址: https://gitcode.com/gh_mirrors/dance1/Dance创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表