KafkaRefresh 1.7.0

KafkaRefresh 1.7.0

K 维护。



  • k

KafkaRefresh

动画、可定制和灵活的下拉刷新框架,旨在加快和简化 iOS 开发。

报告错误 · 请求功能 · 中文文档


状态

GitHub license CocoaPods Compatible platform language Email


屏幕截图

KafkaRefreshStyle 顶部截图 底部截图
原生
ReplicatorWoody
ReplicatorAllen
ReplicatorCircle
ReplicatorDot
ReplicatorArc
ReplicatorTriangle
AnimatableRing
AnimatableArrow

特性

  • 内置丰富的动画样式,支持自定义

  • 非刷新状态自动隐藏

    为了避免开发者手动调整contentInset,刷新后控制器的视觉体验受到影响,刷新控件的 Appearance 会自动刷新;
    最常见的情况是没有数据,刷新控件的底部不隐藏,使用 KafkaRefresh 避免这个问题。

  • 刷新结束时抗锯齿

    当刷新控件完成刷新后,如果 UIScrollView 处在滚动状态,KafkaRefresh 会根据刷新控件调整此时控制 UIScrollView 的 contntOffset;

  • 支持设置偏移阈值以触发刷新

    设置 stretchOffsetYAxisThreshold 的值可以控制刷新拉动距离。这个属性是相对于控件高度的比值,必须设置大于 1.0。

  • 支持全局设置

    KafkaRefreshDefaults 用于全局设置的单例

  • 支持进度回调

    实时回调拖拽偏移比例,根据动画调整进度。

  • 自适应 contentInset 系统调整和人工调整

    自适应于 UINavigationController 的 UIScrollView contentInset 属性调整,即使 contentInset 自动设置值,KafkaRefresh 仍能适应这种调整。

  • 解决刷新时的分区视图浮动问题

  • 支持横竖屏切换自适应

    无需考虑横竖屏刷新时的刷新问题。

  • iOS 7+

    支持 iOS 7 及以上系统。包括 iPhone X。

  • 支持自动刷新

    当用户滑动 scrollview 到底部时,会自动触发刷新,用户无需滑动到底部并向上拉动 scrollview。此功能默认不启用,因为大多数人在使用功能时不会查看文档。如果使用不当,很容易导致刷新停止。

    使用预加载功能,请严格遵守以下要求

    • self.tableView.footRefreshControl.autoRefreshOnFoot = YES; 请设置 autoRefreshOnFoot 为 TRUE;

    • 在 refreshHandler 中,严格遵循以下逻辑!

       if ({No data needs to be stitched}) {
           [weakSelf.tableView.footRefreshControl endRefreshingAndNoLongerRefreshingWithAlertText:@"no more"];
       } else {
           [weakSelf.tableView.footRefreshControl endRefreshingWithAlertText:@"did load successfully" completion:nil];
       }
  • 文献覆盖率 100%

    您可以在头文件中看到所有方法和类的使用。

安装

  • CocoaPods
pod 'KafkaRefresh'
  • Carthage

如果有人想要通过 carthage 安装,请提交一个 pull request。我自己并不使用这个包管理器。

使用方法

 #import "KafkaRefresh.h" 
初始化
  • 第一种方法
#pragma mark - head

[self.tableView bindHeadRefreshHandler:^{
        
    } themeColor:MainColor refreshStyle:KafkaRefreshStyleAnimatableArrow];

#pragma mark - foot

[self.tableView bindFootRefreshHandler:^{
        
    } themeColor:MainColor refreshStyle:KafkaRefreshStyleAnimatableArrow]; 

#pragma mark - auto refresh

self.tableView.footRefreshControl.autoRefreshOnFoot = YES;
  • 第二种方法
 KafkaArrowHeader * arrow = [[KafkaArrowHeader alloc] init];
 arrow.refreshHandler = ^{
	 //to do something... 
 };
 self.tableView.headRefreshControl = arrow;
  • 第三种方法(全局配置)
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
	[[KafkaRefreshDefaults standardRefreshDefaults] setHeaderDefaultStyle:KafkaRefreshStyleAnimatableRing];
	return YES;
}

#pragma mark - global

[self.tableView bindGlobalStyleForFootRefreshHandler:^{
        
}];
手动触发刷新
 [self.tableView.headRefreshControl beginRefreshing];
 [self.tableView.footRefreshControl beginRefreshing];
结束刷新

当您完成刷新且不需要显示任何提示或动画时,请调用以下方法。

- (void)endRefreshing; 

当您完成刷新并需要显示提示消息时,请调用以下方法。

- (void)endRefreshingWithAlertText:(NSString *)text completion:(dispatch_block_t)completion; 

当您完成刷新且不再需要刷新时,请调用以下方法。

- (void)endRefreshingAndNoLongerRefreshingWithAlertText:(NSString *)text;
恢复刷新可用
/**
 After you call ‘endRefreshingAndNoLongerRefreshingWithAlertText’,
 you need to resume refresh available
 */
- (void)resumeRefreshAvailable;

自定义

以KafkaheadRefreshControl为例

 #import "KafkaheadRefreshControl.h"
 @interface CustomHeader : KafkafootRefreshControl
 @end
@implementation CustomHeader 

- (void)kafkaDidScrollWithProgress:(CGFloat)progress max:(const CGFloat)max{
   //progress callback
}

- (void)kafkaRefreshStateDidChange:(KafkaRefreshState)state{
   [super kafkaRefreshStateDidChange:state];
}
@end

注意事项

  • 很多人问我一个问题:调用insertRowAtIndexPath: withRowAnimation:后tableView跳转,这不是KafkaRefresh的bug。当初始化tableView时设置tableView.estimatedRowHeight = UITableViewAutomaticDimension;可以解决这个问题;

  • 请更新到最新版本!

通信

  1. 如果您需要帮助,请发送电子邮件至[email protected]
  2. 如果您发现了一个bug,并且可以提供可靠重现它的步骤,请开启一个issue。
  3. 个人精力有限,Kafka提供了足够的回调接口以提高更丰富的UI效果,我们欢迎您一起加入并提交pull request。

许可

KafkaRefresh采用MIT许可发布。有关详细信息,请参阅LICENSE

FOSSA Status