Swift学习27:MZRefresh

张建 lol

前言

Swift 下拉刷新、上拉加载组件,简单易用,适用于 UIScrollView、UITableView、UICollectionView 等继承自 UIScrollView 的组件

集成

使用 Cocoapods 引入

1
pod 'MZRefresh'

使用

这里以 UITableView 为例

  • 添加刷新组件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// 添加下拉刷新组件
self.tableV.setRefreshHeader(MZRefreshNormalHeader(beginRefresh: {
// 请求数据,请求到数据后记得停止刷新动画
self.loadData()
}))

// 添加上拉加载组件
self.tableV.setRefreshFooter(MZRefreshNormalFooter(beginRefresh: {
// 请求数据,请求到数据后记得停止刷新动画
self.loadMore()
}))

// 加载数据
func loadData() {
print("下拉刷新")

}
func loadMore() {
print("上拉加载")
}
  • 手动下拉刷新或加载更多
1
2
3
4
// 手动触发下拉刷新
self.tableV.startHeaderRefreshing(animated: true)
// 手动触发上拉加载
self.tableV.startFooterRefreshing(animated: true)
  • 停止下拉刷新或加载更多
1
2
3
4
// 停止下拉刷新动画
self.tableV.stopHeaderRefreshing()
// 停止上拉加载动画
self.tableV.stopFooterRefreshing()

配置管理

  • 通过 MZRefreshConfig 类管理部分组件属性
1
2
3
4
5
6
7
8
9
// 管理部分组件属性
// 刷新状态文字颜色
MZRefreshConfig.shareInstance.setRefreshStatusColor(.blue)
// 刷新状态文字大小
MZRefreshConfig.shareInstance.setRefreshStatusFont(.systemFont(ofSize: 18))
// 刷新时间文字颜色
MZRefreshConfig.shareInstance.setRefreshTimeColor(.green)
// 刷新时间文字大小
MZRefreshConfig.shareInstance.setRefreshTimeFont(.systemFont(ofSize: 12))

MZRefreshNormalHeader & MZRefreshNormalFooter

  • 下拉刷新组件
1
2
3
4
5
6
7
8
9
/*
type 刷新动画类型
color 刷新动画颜色
showTime 是否显示上次刷新时间
beginRefresh 刷新回调
*/
MZRefreshNormalHeader(type: .lineSpinFadeLoader, color: .brown, showTime: true) {

}
  • 上拉加载组件
1
2
3
4
5
6
7
8
/*
type 刷新动画类型
color 刷新动画颜色
beginRefresh 刷新回调
*/
MZRefreshNormalFooter(type: .lineScalePulseOut, color: .brown, beginRefresh: {

}
  • 刷新动画类型

MZRefreshGifHeader & MZRefreshGifFooter

  • 下拉刷新组件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/*
下拉刷新组件
images gif分解图片数组
size gif图片显示大小
animationDuration 是否显示上次下拉刷新时间
showTime gif动画时间
beginRefresh 刷新回调
*/
MZRefreshGifHeader(images: animationImages, size: 60, animationDuration: 1.0, showTime: true, beginRefresh: {

})

/*
images gif图片Data
size gif图片显示大小
animationDuration 是否显示上次下拉刷新时间
showTime gif动画时间
beginRefresh 刷新回调
*/
MZRefreshGifHeader(gifImage: data, size: 40, animationDuration: 1.0, showTime: true, beginRefresh: {

})
  • 上拉加载组件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/*
上拉加载组件
images gif分解图片数组
size gif图片显示大小
animationDuration 是否显示上次下拉刷新时间
beginRefresh 刷新回调
*/
MZRefreshGifFooter(images: animationImages, size: 60, animationDuration: 1.0, beginRefresh: {

})

/*
上拉加载组件
gifImage gif图片Data
size gif图片显示大小
animationDuration 是否显示上次下拉刷新时间
beginRefresh 刷新回调
*/
MZRefreshGifFooter(gifImage: data, size: 40, animationDuration: 0.0, beginRefresh: {

})
  • gif图片Data获取方式
1
2
let path = Bundle.main.path(forResource: "1", ofType: "gif")!
let data = try! Data(contentsOf: URL(fileURLWithPath: path))

MZRefreshOnlyGifHeader

  • 下拉刷新组件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/*
下拉刷新组件
images gif分解图片数组
size gif图片显示大小
refreshOffSet 开始刷新所需的偏移量
animationDuration gif动画时间
readyImage 释放刷新图片
beginRefresh 刷新回调
*/
MZRefreshOnlyGifHeader(images: animationImages, size: 80, refreshOffSet: 80, animationDuration: 1.0, readyImage: nil, beginRefresh: {

})

/*
下拉刷新组件
gifImage gif图片Data
size gif图片显示大小
refreshOffSet 开始刷新所需的偏移量
animationDuration gif动画时间
readyImage 释放刷新图片
beginRefresh 刷新回调
*/
MZRefreshOnlyGifHeader(gifImage: data, size: 80, refreshOffSet: 80, animationDuration: 1.0, readyImage: nil, beginRefresh: {

})

stopRefreshingWithNoMoreData

  • 设置 NoMoreData 组件
1
2
3
4
5
6
7
let footer = UILabel(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: 40))
footer.font = .systemFont(ofSize: 14)
footer.textAlignment = .center
footer.textColor = .black
footer.text = "—— 生活的强者,往往都能坚持到底 ——"
footer.textColor = .brown
self.tableV.setRefreshNoMoreDataView(footer)
  • 没有更多数据加载,取消上拉加载功能
1
2
3
4
5
// 停止下拉刷新动画,并显示没有更多数据
self.tableV.stopHeaderRefreshingWithNoMoreData()

// 停止上拉加载动画,并显示没有更多数据
self.tableV.stopFooterRefreshingWithNoMoreData()

自定义

  • 下拉刷新
1
通过 MZRefreshHeaderComponent 协议实现下拉刷新组件自定义,可参考MZRefreshNormalHeader、MZRefreshOnlyGifHeader等组件实现
  • 上拉加载
1
通过 MZRefreshFooterComponent 协议实现下拉刷新组件自定义,可参考MZRefreshNormalFooter、MZRefreshGifFooter等组件实现
  • Post title:Swift学习27:MZRefresh
  • Post author:张建
  • Create time:2023-03-28 13:38:45
  • Post link:https://redefine.ohevan.com/2023/03/28/Swift三方框架/Swift学习27:MZRefresh/
  • Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.