XZRefresh - 迄今为止最流畅丝滑的iOS下拉刷新控件

下拉刷新、上拉加载是业务中常用的组件,一款好的下拉刷新组件,能显著提高用户操作时的使用体验。下面让我来介绍一下XZRefresh这款新发现的下拉刷新组件吧。与别的组件相比,一是它本身内置了两个相当不错的刷新效果,二是它的流畅性、稳定性和可拓展性都十分的强大。

安装使用

推荐使用CocoaPods安装XZRefresh组件。

pod 'XZRefresh'

效果

XZRefresh内置了两种刷新效果。

  • XZRefreshStyle1View:默认下拉刷新效果,也可作为上拉加载效果。
默认下拉刷新效果
  • XZRefreshStyle2View:默认上拉加载效果,也可作为下拉刷新效果。
默认上拉加载效果

如何使用

一行代码实现下拉刷新或上拉加载。

// 使用默认的下拉刷新控件
[self.tableView xz_headerRefreshingView];
// 使用默认的上拉加载控件
[self.tableView xz_footerRefreshingView];

实现XZRefreshDelegate协议即可接收事件,默认情况下 UIScrollView 的 delegate 即为下拉刷新或上拉加载的事件接收者。

- (void)scrollView:(UIScrollView *)scrollView headerRefreshingViewDidBeginAnimating:(XZRefreshView *)headerRefreshingView {
    // handle the pull down refreshing
    [headerRefreshingView endAnimating];
}

- (void)scrollView:(UIScrollView *)scrollView footerRefreshingViewDidBeginAnimating:(XZRefreshView *)footerRefreshingView {
    // handle the pull up refreshing
    [footerRefreshingView endAnimating];
}

也可以指定事件接收者。

self.tableView.xz_headerRefreshingView.delegate = self;
self.tableView.xz_footerRefreshingView.delegate = self;

主动唤起刷新状态。

[self.tableView.xz_headerRefreshingView beginAnimating];
[self.tableView.xz_footerRefreshingView beginAnimating:YES completion:^(BOOL finished) {
    // the footer refreshing view is animating now
}];

通过XZRefreshViewadjustment属性,可以设置适配UIScrollView边距的方式,支持三种模式:

  • XZRefreshAdjustmentAutomatic:自动适配由 contentInsetAdjustmentBehavior 影响的边距
  • XZRefreshAdjustmentNormal:仅适配 UIScrollView 自身的边距。
  • XZRefreshAdjustmentNone:不适配边距。
self.tableView.xz_footerRefreshingView.adjustment = XZRefreshAdjustmentNone;

除适配模式外,还可以通过offset属性,来调整刷新视图的位置。

self.tableView.xz_headerRefreshingView.offset = 50; // 向上偏移 50 点
self.tableView.xz_footerRefreshingView.offset = 50; // 向下偏移 50 点

另外,底部刷新视图,始终布局在UIScrollView的底部,即使在contentSize.height < bounds.size.height时也是。

自定义

1、XZRefreshView提供了完整的刷新过程事件,继承它即可自定义刷新效果,具体可参考内置的XZRefreshStyle1ViewXZRefreshStyle2View两款刷新效果。

2、实现二楼思路,由于不同的业务,需要的二楼效果不一定相同,所以暂没有内置二楼效果。

- (void)scrollView:(UIScrollView *)scrollView didScrollDistance:(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];
    }
}

示例工程

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

To run the example project, clone the repo, and run pod install from the Pods directory first.

环境需求 Requirements

iOS 11.0, Xcode 14.0

Author

Xezun, developer@xezun.com

License

XZRefresh is available under the MIT license. See the LICENSE file for more info.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值