XZRefresh 1.0.6

XZRefresh 1.0.6

Xezun维护。



XZRefresh 1.0.6

  • 作者:
  • 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];
    }
}

作者 Author

Xezun,[email protected]

许可协议 License

XZRefresh 在 MIT 许可下提供。有关更多信息,请参阅 LICENSE 文件。