{"id":16221565,"url":"https://github.com/1691665955/mzrefresh","last_synced_at":"2025-03-19T11:31:10.917Z","repository":{"id":45124688,"uuid":"447532589","full_name":"1691665955/MZRefresh","owner":"1691665955","description":"Swift下拉刷新、上拉加载组件，简单易用","archived":false,"fork":false,"pushed_at":"2023-12-07T03:34:29.000Z","size":10335,"stargazers_count":32,"open_issues_count":2,"forks_count":8,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-03-13T08:39:19.636Z","etag":null,"topics":["ios","load","loadmore","pulldown","refresh","swift"],"latest_commit_sha":null,"homepage":"","language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/1691665955.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-01-13T09:07:20.000Z","updated_at":"2025-03-05T01:23:36.000Z","dependencies_parsed_at":"2024-10-27T20:32:15.321Z","dependency_job_id":"53785b1c-0736-49bb-8c45-ad7fbd8dfbc4","html_url":"https://github.com/1691665955/MZRefresh","commit_stats":{"total_commits":20,"total_committers":1,"mean_commits":20.0,"dds":0.0,"last_synced_commit":"9cd82cb502822d3997edcd73629afd12fb31b5cd"},"previous_names":[],"tags_count":9,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/1691665955%2FMZRefresh","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/1691665955%2FMZRefresh/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/1691665955%2FMZRefresh/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/1691665955%2FMZRefresh/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/1691665955","download_url":"https://codeload.github.com/1691665955/MZRefresh/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244416946,"owners_count":20449369,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ios","load","loadmore","pulldown","refresh","swift"],"created_at":"2024-10-10T12:08:54.903Z","updated_at":"2025-03-19T11:31:07.957Z","avatar_url":"https://github.com/1691665955.png","language":"Swift","funding_links":[],"categories":[],"sub_categories":[],"readme":"# MZRefresh\nSwift下拉刷新、上拉加载组件，简单易用，适用于UIScrollView、UITableView、UICollectionView等继承于UIScrollView的组件。\n\n\u003ctable\u003e\n\n\u003ctr\u003e\n\u003cth\u003e下拉刷新\u003c/th\u003e\n\u003cth\u003e上拉加载\u003c/th\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd\u003e\u003cimg src=\"4.gif\" width=\"300\"/\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cimg src=\"5.gif\" width=\"300\"/\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003c/table\u003e\n\n\n#### Cocoapods 引入\n```\npod 'MZRefresh', '~\u003e 0.0.9'\n```\n\n#### 使用\n这里使用UIScrollView为例\n\n- 添加刷新组件\n```\n// 添加下拉刷新组件\nscrollView.setRefreshHeader(MZRefreshNormalHeader(beginRefresh: {\n    // 请求数据，请求到数据后记得停止刷新动画\n    self?.loadNew()\n}))\n\n// 添加上拉加载组件\nscrollView.setRefreshFooter(MZRefreshNormalFooter(beginRefresh: {\n    // 请求数据，请求到数据后记得停止刷新动画\n    self?.loadMore()\n}))\n\nfunc loadNew() {\n    // 请求数据，刷新页面\n    // 停止下拉刷新动画\n    scrollView.stopHeaderRefreshing()\n}\n\nfunc loadMore(_ count: Int) {\n    // 请求数据，刷新页面\n    // 停止上拉加载动画\n    scrollView.stopFooterRefreshing()\n}\n```\n\n- 移除刷新组件\n```\n// 移除下拉刷新组件\nscrollView.removeRefreshHeader()\n\n// 移除上拉加载组件\nscrollView.removeRefreshFooter()\n```\n\n- 手动刷新或加载更多\n```\n// 手动触发下拉刷新\n// animated代表是否执行动画\nself.scrollView.startHeaderRefreshing(animated: true)\n\n// 手动触发上拉加载\n// animated代表是否执行动画\nself.scrollView.startFooterRefreshing(animated: true)\n```\n\n- 停止刷新动画\n```\n// 停止下拉刷新动画\nscrollView.stopHeaderRefreshing()\n\n// 停止上拉加载动画\nscrollView.stopFooterRefreshing()\n```\n\n#### 配置管理\n\n- 通过MZRefreshConfig类管理部分组件属性\n\n```\nMZRefreshConfig.shareInstance.setRefreshStatusColor(.brown)\nMZRefreshConfig.shareInstance.setRefreshStatusFont(.systemFont(ofSize: 18))\nMZRefreshConfig.shareInstance.setRefreshTimeColor(.cyan)\nMZRefreshConfig.shareInstance.setRefreshTimeFont(.systemFont(ofSize: 12))\n```\n\n\n#### MZRefreshNormalHeader \u0026 MZRefreshNormalFooter\n\n- 刷新组件初始化\n```\n// 下拉刷新组件\n// type         刷新动画类型\n// color        刷新动画颜色\n// showTime     是否显示上次刷新时间\n// beginRefresh 刷新回调\nMZRefreshNormalHeader(type: .lineSpinFadeLoader, color: .brown, showTime: true, beginRefresh: {\n    \n})\n\n// 上拉加载组件\n// type         刷新动画类型\n// color        刷新动画颜色\n// beginRefresh 刷新回调\nMZRefreshNormalFooter(type: .lineSpinFadeLoader, color: .brown, beginRefresh: {\n    \n})\n```\n\n- 动画类型\n\u003ctable\u003e\n\n\u003ctr\u003e\n\u003cth\u003e1\u003c/th\u003e\n\u003cth\u003e2\u003c/th\u003e\n\u003cth\u003e3\u003c/th\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd\u003e\u003cimg src=\"1.gif\" width=\"300\"/\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cimg src=\"2.gif\" width=\"300\"/\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cimg src=\"3.gif\" width=\"300\"/\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003c/table\u003e\n\n#### MZRefreshGifHeader \u0026 MZRefreshGifFooter\n\n- 刷新组件初始化\n```\n// 下拉刷新组件\n// images               gif分解图片数组\n// size                 gif图片显示大小\n// animationDuration    是否显示上次下拉刷新时间\n// showTime             gif动画时间\n// beginRefresh         刷新回调\nMZRefreshGifHeader(images: animationImages, size: 60, animationDuration: 1.0, showTime: true, beginRefresh: {\n    \n})\n\n// 上拉加载组件\n// images               gif分解图片数组\n// size                 gif图片显示大小\n// animationDuration    是否显示上次下拉刷新时间\n// beginRefresh         刷新回调\nMZRefreshGifFooter(images: animationImages, size: 60, animationDuration: 1.0, beginRefresh: {\n    \n})\n\n\n\n// 下拉刷新组件\n// images               gif图片Data\n// size                 gif图片显示大小\n// animationDuration    是否显示上次下拉刷新时间\n// showTime             gif动画时间\n// beginRefresh         刷新回调\nMZRefreshGifHeader(gifImage: data, size: 40, animationDuration: 1.0, showTime: true, beginRefresh: {\n    \n})\n\n// 上拉加载组件\n// gifImage             gif图片Data\n// size                 gif图片显示大小\n// animationDuration    是否显示上次下拉刷新时间\n// beginRefresh         刷新回调\nMZRefreshGifFooter(gifImage: data, size: 40, animationDuration: 0.0, beginRefresh: {\n    \n})\n\n// gif图片Data获取方式如下\nlet path = Bundle.main.path(forResource: \"1\", ofType: \"gif\")!\nlet data = try! Data(contentsOf: URL(fileURLWithPath: path))\n```\n\n\u003ctable\u003e\n\n\u003ctr\u003e\n\u003cth\u003e下拉刷新\u003c/th\u003e\n\u003cth\u003e上拉加载\u003c/th\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd\u003e\u003cimg src=\"6.gif\" width=\"300\"/\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cimg src=\"7.gif\" width=\"300\"/\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003c/table\u003e\n\n#### MZRefreshOnlyGifHeader\n\n- 刷新组件初始化\n```\n// 下拉刷新组件\n// images               gif分解图片数组\n// size                 gif图片显示大小\n// refreshOffSet        开始刷新所需的偏移量\n// animationDuration    gif动画时间\n// readyImage           释放刷新图片\n// beginRefresh         刷新回调\nMZRefreshOnlyGifHeader(images: animationImages, size: 80, refreshOffSet: 80, animationDuration: 1.0, readyImage: nil, beginRefresh: {\n\n})\n\n// 下拉刷新组件\n// gifImage             gif图片Data\n// size                 gif图片显示大小\n// refreshOffSet        开始刷新所需的偏移量\n// animationDuration    gif动画时间\n// readyImage           释放刷新图片\n// beginRefresh         刷新回调\nMZRefreshOnlyGifHeader(gifImage: data, size: 80, refreshOffSet: 80, animationDuration: 1.0, readyImage: nil, beginRefresh: {\n\n})\n```\n\n\u003cdiv align=center\u003e\n\u003cimg src=\"8.gif\" width=\"300px\" /\u003e\n\u003c/div\u003e\n\n#### stopRefreshingWithNoMoreData\n\n- 设置“NoMoreData”组件\n默认样式不需要设置\n\n```\nlet footer = UILabel(frame: CGRect(x: 0, y: 0, width: SCREEN_WIDTH, height: 40))\nfooter.font = .systemFont(ofSize: 14)\nfooter.textAlignment = .center\nfooter.textColor = .black\nfooter.text = \"—— 生活的强者，往往都能坚持到底 ——\"\nfooter.textColor = .brown\ntableView.setRefreshNoMoreDataView(footer)\n```\n\n- 没有更多数据加载，取消上拉加载功能\n\n```\n// 停止下拉刷新动画，并显示没有更多数据\ntableView.stopHeaderRefreshingWithNoMoreData()\n\n// 停止上拉加载动画，并显示没有更多数据\ntableView.stopFooterRefreshingWithNoMoreData()\n```\n\n\u003ctable\u003e\n\n\u003ctr\u003e\n\u003cth\u003e默认样式\u003c/th\u003e\n\u003cth\u003e自定义样式\u003c/th\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd\u003e\u003cimg src=\"9.gif\" width=\"300\"/\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cimg src=\"10.gif\" width=\"300\"/\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003c/table\u003e\n\n#### 自定义\n\n- 下拉刷新\n\n通过MZRefreshHeaderComponent协议实现下拉刷新组件自定义，可参考MZRefreshNormalHeader、MZRefreshOnlyGifHeader等组件实现\n\n- 上拉加载\n\n通过MZRefreshFooterComponent协议实现下拉刷新组件自定义，可参考MZRefreshNormalFooter、MZRefreshGifFooter等组件实现\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F1691665955%2Fmzrefresh","html_url":"https://awesome.ecosyste.ms/projects/github.com%2F1691665955%2Fmzrefresh","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F1691665955%2Fmzrefresh/lists"}