
CRNetworkButton与URLSession集成教程从发送按钮到网络请求的完整闭环【免费下载链接】CRNetworkButtonSend Button for iOS项目地址: https://gitcode.com/gh_mirrors/cr/CRNetworkButtonCRNetworkButton 是一款专为 iOS 打造的发送按钮动画库当用户点击按钮触发网络请求时它会把普通的 UIButton 自动变身成加载动画、成功对勾或失败提示将枯燥的等待过程变成直观的视觉反馈。这篇教程将带你一步步把 CRNetworkButton 与 URLSession 深度集成打通从点击发送到请求返回的完整闭环让 App 的交互体验直接提升一个档次。全文面向新手代码量精简跟着做就能跑通。为什么需要一个会思考的发送按钮很多 App 里用户点了发送后按钮没有任何反应用户不知道请求是成功还是失败也不知道该不该再点一次。CRNetworkButton 正是为解决这个痛点而生它把网络请求的三种状态全部演出来⏳加载中按钮收缩成圆形内部线条旋转一眼就知道请求在进行中✅成功播放对勾动画按钮文字从StartText切换为EndText❌失败播放叉号动画以红色错误样式提示用户整个动画机制封装在 CRNetworkButton.swift 这一个文件里内部通过CRState状态机管理ready → loading → finishing → finished四个阶段你用起来只需要调用几个简单方法非常省心。快速开始CocoaPods 一行命令集成 CRNetworkButtonCRNetworkButton 支持 iOS 8 及以上系统通过 CocoaPods 安装只需两步。第一步在 Podfile 中添加一行pod CRNetworkButton第二步在终端执行pod install然后在需要使用的地方引入import CRNetworkButton想跑官方 Demo 的话可以克隆仓库后进入 Example 目录执行pod installgit clone https://gitcode.com/gh_mirrors/cr/CRNetworkButton三步上手从 Storyboard 配置第一个网络按钮CRNetworkButton 充分利用了IBDesignable和IBInspectable特性绝大多数配置项都能在 Storyboard 的右侧面板直接设置无需写一行代码。第 1 步把按钮的 Class 改成CRNetworkButton第 2 步设置关键文案属性加载前的文字、成功后的文字、失败时的文字第 3 步按需调整外观与行为。最常用的几个配置属性如下属性作用默认值startText加载前显示的文字GoendText成功后显示的文字DoneerrorText失败时显示的文字ErroranimateOnTap点击后是否自动开始动画trueshouldAutoReverse结束后是否自动恢复初始状态falseprogressMode是否开启进度条模式falsecrDotColor加载圆点/线条颜色绿色crErrorColor错误状态颜色红色核心 API 速览记住 4 个方法就够了CRNetworkButton 对外暴露的方法极少全部记住也很轻松startAnimate()开始加载动画stopAnimate()请求成功停止动画并展示对勾stopByError()请求失败停止动画并展示错误样式updateProgress(_:)进度模式下更新进度0 ~ 1resetToReady()手动复位到初始状态具体实现见 CRNetworkButton.swift每个方法都短小精悍。CRNetworkButton 与 URLSession 集成实战完整闭环下面这段代码就是从发送按钮到网络请求的完整闭环核心整个流程只有三步IBAction func sendButtonTapped(_ sender: CRNetworkButton) { guard let url URL(string: https://api.example.com/send) else { return } sender.startAnimate() // ① 点击瞬间按钮进入加载动画 var request URLRequest(url: url) request.httpMethod POST request.httpBody hello.data(using: .utf8) let task URLSession.shared.dataTask(with: request) { data, response, error in DispatchQueue.main.async { if error ! nil { sender.stopByError() // ② 请求失败 → 红色错误反馈 } else { sender.stopAnimate() // ③ 请求成功 → 对勾动画 endText } } } task.resume() }拆开来看闭环其实只有三个关键动作startAnimate()用户点击的瞬间立刻给出反馈告诉用户请求已发出stopAnimate()URLSession 回调成功时调用展示对勾和完成文案stopByError()URLSession 回调出错时调用用红色叉号提示失败。注意回调要切回主线程DispatchQueue.main.async因为动画操作必须在主线程执行。官方示例 ViewController.swift 和 FakeNetworkManager.swift 也是同样的回调模式可以直接参考。进阶玩法用 URLSession 下载进度驱动按钮进度环如果请求耗时较长比如上传/下载大文件默认的旋转动画就不够用了。把progressMode设为true再配合 URLSession 的下载代理就能让按钮变成一个实时进度环。func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didWriteData bytesWritten: Int64, totalBytesWritten: Int64, totalBytesExpectedToWrite: Int64) { let progress CGFloat(totalBytesWritten) / CGFloat(totalBytesExpectedToWrite) DispatchQueue.main.async { self.networkButton.updateProgress(progress) // 进度实时驱动按钮圆弧 } }当进度到达 1.0 时调用stopAnimate()按钮会收起进度环并播放完成动画整个交互流畅自然。这正是 CRNetworkButton 相比普通按钮最出彩的地方让用户对请求进展一目了然。失败处理与状态复位别忘了 resetToReady在真实项目中用户可能想再试一次。如果设置了shouldAutoReverse true按钮会在动画结束后自动恢复初始状态否则你需要手动调用resetToReady()让按钮回到可点击状态。建议在按钮的点击事件里做一次兜底判断官方示例的做法很值得借鉴if sender.currState .finished { sender.resetToReady() sender.isSelected false }常见坑与最佳实践线程所有动画方法都必须在主线程调用URLSession 回调里记得DispatchQueue.main.async防重复点击加载期间按钮会自动isEnabled false不必担心用户连点状态复位请求结束后如需再次使用务必resetToReady()或开启shouldAutoReverse配色统一通过crDotColor/crErrorColor与 App 主题色保持一致结语从按钮点击到网络请求返回CRNetworkButton 用一套简洁优雅的状态机把加载、成功、失败三种反馈串成了完整的交互闭环。配合 URLSession 的 dataTask 与 downloadTask无论是普通请求还是带进度的下载都能轻松驾驭。赶紧把这段 CRNetworkButton 与 URLSession 集成教程里的代码跑起来让你的发送按钮从此会说话【免费下载链接】CRNetworkButtonSend Button for iOS项目地址: https://gitcode.com/gh_mirrors/cr/CRNetworkButton创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考