XZRefreshing 2.0.0

XZRefreshing 2.0.0

Xezun 维护。



  • Xezun

XZRefresh

Version License Platform

示例工程 Example

要运行示例工程,请在拉取代码后,先在 Pods 目录下执行 pod install 命令。

要运行示例项目,请先克隆仓库,然后从 Pods 目录运行 pod install

环境需求 Requirements

iOS 12.0, Xcode 14.0

安装使用 Installation

推荐使用 CocoaPods 安装 XZRefresh 组件。

XZRefresh 通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile

pod 'XZRefresh'

效果展示

XZRefresh 内置了两种刷新效果。

  • 下拉刷新默认效果:XZRefreshStyle1View

  • 上拉加载默认效果:XZRefreshStyle2View

如何使用

创建组件

可以通过 xz_headerRefreshViewxz_footerRefreshView 属性设置刷新控件。此外,XZRefresh 还提供了默认控件,可以通过懒加载自动创建。

// 使用默认的刷新控件
[self.tableView xz_headerRefreshView];

通过继承 XZRefreshView 可自定义刷新效果,具体可参考 XZRefreshStyle1ViewXZRefreshStyle2View

// 使用创建的刷新控件
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];
}

您可以通过 XZRefreshViewdelegate 属性指定事件的接收对象。

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
}];

适配布局

通过 XZRefreshViewadjustment 属性,可以设置适配 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 文件。