要运行示例工程,请在拉取代码后,先在 Pods
目录下执行 pod install
命令。
要运行示例项目,请先克隆仓库,然后从 Pods
目录运行 pod install
。
iOS 12.0, Xcode 14.0
推荐使用 CocoaPods 安装 XZRefresh
组件。
XZRefresh
通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile
pod 'XZRefresh'
XZRefresh 内置了两种刷新效果。
- 下拉刷新默认效果:XZRefreshStyle1View
- 上拉加载默认效果:XZRefreshStyle2View
可以通过 xz_headerRefreshView
或 xz_footerRefreshView
属性设置刷新控件。此外,XZRefresh
还提供了默认控件,可以通过懒加载自动创建。
// 使用默认的刷新控件
[self.tableView xz_headerRefreshView];
通过继承 XZRefreshView
可自定义刷新效果,具体可参考 XZRefreshStyle1View
或 XZRefreshStyle2View
。
// 使用创建的刷新控件
self.tableView.xz_headerRefreshView = [[XZRefreshStyle2View alloc] init];
默认情况下,XZRefresh
使用 UIScrollView.delegate
作为代理,实现协议 XZRefreshDelegate
的方法即可处理事件。
// 下拉刷新事件
- (void)scrollView:(UIScrollView *)scrollView headerDidBeginRefreshing:(XZRefreshView *)refreshView {
// handle the pull down refreshing
[refreshView endAnimating];
}
// 上拉加载事件
- (void)scrollView:(UIScrollView *)scrollView footerDidBeginRefreshing:(XZRefreshView *)refreshView {
// handle the pull up refreshing
[refreshView endAnimating];
}
您可以通过 XZRefreshView
的 delegate
属性指定事件的接收对象。
self.tableView.xz_headerRefreshView.delegate = theReceiverObject;
调用唤起刷新的方法,不会触发事件方法。
[self.tableView.xz_headerRefreshView beginRefreshing];
[self.tableView.xz_footerRefreshView beginRefreshing:YES completion:^(BOOL finished) {
// the footer refreshing view is animating now
}];
通过 XZRefreshView
的 adjustment
属性,可以设置适配 UIScrollView
边距的方式,支持三种模式:
- XZRefreshAdjustmentAutomatic:适配
UIScrollView.adjustedContentInset
边距。 - XZRefreshAdjustmentNormal:适配
UIScrollView.contentInset
边距。 - XZRefreshAdjustmentNone:不适配边距。
self.tableView.xz_footerRefreshView.adjustment = XZRefreshAdjustmentNone;
除了适配模式外,还可以通过 offset
属性调整刷新视图的位置。
self.tableView.xz_headerRefreshView.offset = 50; // 向上偏移 50 点
self.tableView.xz_footerRefreshView.offset = 50; // 向下偏移 50 点
此外,尾部刷新视图始终布局在 UIScrollView
的尾部,即使在 contentSize.height < bounds.size.height
时也是。
通过 automaticRefreshDistance
属性,可以指定触发自动刷新的距离。
// 当页面滚动距离底部 50 时,自动触发底部刷新。
self.tableView.xz_footerRefreshView.automaticRefreshDistance = 50;
下拉刷新后继续下拉进入二级页面,是目前实际应用比较广泛的功能。通过 XZRefresh
自定义刷新控件可以轻松实现此类效果。
- (void)scrollView:(UIScrollView *)scrollView didScrollRefreshing:(CGFloat)distance {
if (distance < 50) {
// 展示下拉刷新的过程
} else if (distance < 100) {
// 松手进入刷新,或继续下拉进入二楼
} else if (distance < 150) {
// 松手进入二楼
} else {
// 直接进入二楼
[self.delegate enterSecondFloor:YES];
}
}
- (BOOL)scrollView:(UIScrollView *)scrollView shouldBeginRefreshing:(CGFloat)distance {
if (distance < 50) {
return NO;
}
if (distance < 100) {
return YES; // 进入刷新状态
}
if (distance < 150) {
[self.delegate enterSecondFloor:NO]; // 松手进入二楼
return NO;
}
return NO; // 直接进入二楼
}
/// 处理事件
- (void)enterSecondFloor:(BOOL)type {
UIViewController *vc = UIViewController.new;
if (type) { // 如有必要,可以为两种不同交互方式,设计不同的转场效果
[self presentViewController:vc animated:YES completion:nil];
} else {
[self.navigationController pushViewController:vc animated:YES];
}
}
Xezun,[email protected]
XZRefresh
可在 MIT 许可证下获得。有关更多信息,请参阅 LICENSE 文件。