ZVRefreshing 2.4.0

ZVRefreshing 2.4.0

测试已测试
语言语言 SwiftSwift
许可 MIT
发布最后发布2020年1月
SPM支持SPM

Zev维护。



  • zevwings

ZVRefreshing


ZVRefreshing是一个纯Swift、易用的刷新组件。

中文文档

需求

  • iOS 8.0+
Swift版本 存储库版本
Swift 5.0 > 2.2.0
Swift 4.2 < 2.1.3

安装

CocoaPod

CocoaPods是一个用于Swift和Objective-C Cocoa项目的依赖管理器。

您可以使用以下命令安装CocoaPods:

$ sudo gem install cocoapods

要使用CocoaPods将ZVRefreshing集成到您的项目中,请将其指定到您的Podfile中。

source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'

target 'TargetName' do
    use_frameworks!
    pod 'ZVRefreshing' ~> '2.0.0'
end

然后,使用CocoaPods安装您的依赖项。

$ pod install

Carthage

Carthage旨在成为向您的应用程序添加框架的最简单方式。

您可以使用以下命令使用Homebrew安装Carthage

$ brew update
$ brew install carthage

要使用Carthage将ZVRefreshing集成到项目中,请将其指定到您的Cartfile

github "zevwings/ZVRefreshing" ~> 0.0.1

然后,使用carthage update构建框架,并将ZVRefreshing.framework拖入您的项目。

注意

框架位于Carthage/Build目录中,您应该将其拖入目标 -> 通用 -> 嵌入的二进制文件

手动

下载此项目,并将ZRefreshing.xcodeproj拖入您的项目。

在您的目标的“通用”选项卡中,点击嵌入的二进制文件下的“+”按钮。

选择ZRefreshing.framework将其添加到您的平台。

示例

尝试

您可以在Appetize上查看在线示例。

通用用法

当您需要添加一个刷新控件时,可以使用import ZVRefreshing

初始化

有三种方法可以初始化该控件。

  • 目标-动作
let header = ZVRefreshNormalHeader(target: NSObject, action: Selector)
self.tableView.header = header
let header = ZVRefreshNormalHeader(refreshHandler: { [weak self] in 
    // your codes    
})
self.tableView.header = header
  • 无参数
let header = RefreshHeader()
self.tableView.header = header

如果您使用无参数方式初始化控件,您可以使用以下代码添加刷新处理程序块或目标-动作

  1. 添加一个刷新处理程序
// add refresh handler
header?.refreshHandler = {
    // your codes            
}
  1. 添加一个目标-动作
// add refresh target-action
header?.addTarget(Any?, action: Selector)
  1. 添加一个目标-动作-UIControlEvents.valueChanged
// The ZVRefreshComponent extend from UIControl, When isRefreshing properties changed will send a UIControlEvents.valueChanged event.
header?.addTarget(Any, action: Selector, for: .valueChanged)

函数

功能和头部和底部相同。

  1. beginRefreshing()

控件开始进入刷新状态。

self.tableView.header?.beginRefreshing()
  1. endRefreshing()

控件开始进入空闲状态。

self.tableView.header?.endRefreshing()
  1. setTitle(_:forState:) 用于自定义控件标题,此函数在 ZVRefreshStateHeader 中。
header.setTitle("pull to refresh...", forState: .idle)
header.setTitle("release to refresh...", forState: .pulling)
header.setTitle("loading...", forState: .refreshing)

 footer.setTitle("pull to refresh...", forState: .idle)
 footer.setTitle("release to refresh...", forState: .pulling)
 footer.setTitle("loading...", forState: .refreshing)
 footer.setTitle("no more data", forState: .noMoreData)
  1. setImages(_:forState:) 用于自定义控件图像,此函数在 ZVRefreshAnimationHeader 中,您可以使用以下代码,也可以扩展一个子类,例如 示例
self.setImages(idleImages, forState: .idle)
self.setImages(refreshingImages, forState: .pulling)
self.setImages(refreshingImages, forState: .refreshing)

属性

头部

  1. lastUpdatedTimeKey 用于存储使用此控件的最后时间,如果没有设置,则所有控件共享密钥 com.zevwings.refreshing.lastUpdateTime
header.lastUpdatedTimeKey = "custom last updated key"
  1. ignoredScrollViewContentInsetTop

当您的表格设置 contentInset 属性时,您应该设置它,例如

self.tableView.contentInset = UIEdgeInsets(top: 30, left: 0, bottom:0, right: 0)
header.ignoredScrollViewContentInsetTop = 30
  1. lastUpdatedTimeLabel

用于自定义 UILabel 属性的 lastUpdatedTimeLabel,例如

// hide the lastUpdatedTimeLabel
header.lastUpdatedTimeLabel.isHidden = true

// set the font for lastUpdatedTimeLabel
header.lastUpdatedTimeLabel.font = .systemFont(ofSize: 16.0)
  1. lastUpdatedTimeLabelText

自定义显示上一次的时间格式。

header.lastUpdatedTimeLabelText = { date in

    if let d = date {
        let formatter = DateFormatter()
        formatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
        return "Last updated:\(formatter.string(from: d))"
    }
    return "There is no record"
}

页脚

  1. isAutomaticallyHidden 设置小部件自动隐藏,默认为 true
footer.isAutomaticallyHidden = false
  1. ignoredScrollViewContentInsetBottom 当你的表格设置 contentInset 属性时,你需要设置它,例如
self.tableView.contentInset = UIEdgeInsets(top:0, left: 0, bottom:30, right: 0)
footer.ignoredScrollViewContentInsetBottom = 30
  1. isAutomaticallyRefresh 设置小部件的自动刷新,默认为 true,这个属性在 ZVRefreshAutoFooter
footer.isAutomaticallyRefresh = false

通用

以下属性对头部和尾部都是相同的。

  1. labelInsetLeft 设置 activityIndicator 和 label 之间的空白宽度。
header.labelInsetLeft = 32.0
  1. activityIndicator 自定义 activityIndicator 的属性,属性请参考 ZActivityIndicatorView

  2. tintColor 自定义所有子小部件的颜色。

header.tintColor = .black
  1. stateLabel 自定义 UILabelstateLabel 属性,例如
// hide the stateLabel
header.stateLabel.isHidden = true

// set the font for stateLabel
header.stateLabel.font = .systemFont(ofSize: 16.0)
  1. animationView

自定义 UIImageViewstateLabel 属性,例如

自定义用法

你可以扩展 ZVRefreshComponent 或它的子类来自定义自己的刷新小部件。例如 示例

属性

  1. state

当刷新状态改变时,自定义你需要的。

open var state: ZVRefreshComponent.State
  1. pullingPercent

当小部件位置改变时,自定义你需要的。

open var pullingPercent: CGFloat
  1. tintColor

自定义你自己的小部件颜色。

open override var tintColor: UIColor!

函数

  1. prepare

定义你自己的控件,在 init(frame: CGRect) 时调用。

open func prepare() {}
  1. placeSubViews

设置你自己的控件大小和位置,在 layoutSubviews() 时调用。

open func placeSubViews() {}
  1. scrollViewContentOffsetDidChanged

观察 UIScrollView.contentOffset,在 UIScrollView.contentOffset 值改变时调用。

open func scrollViewContentOffsetDidChanged(_ change: [NSKeyValueChangeKey: Any]?) {}
  1. scrollViewContentSizeDidChanged

要观察UIScrollView.contentSize,请在UIScrollView.contentSize值发生变化时调用。

open func scrollViewContentSizeDidChanged(_ change: [NSKeyValueChangeKey: Any]?) {}
  1. scrollViewPanStateDidChanged

要观察UIScrollView.panGestureRecognizer.state,请在UIScrollView.panGestureRecognizer.state值发生变化时调用。

open func scrollViewPanStateDidChanged(_ change: [NSKeyValueChangeKey: Any]?) {}

Rx支持

如果您想使用RxSwift,请参考ZVRefreshing+Rx.swift

然后,您可以使用以下代码启动刷新动作。

Observable.just(true)
    .asDriver(onErrorJustReturn: false)
    .drive(flatHeader!.rx.isRefreshing)
    .disposed(by: disposeBag)

或者,您可以使用这段代码来观察刷新状态。

flatHeader?.rx.refresh
    .subscribe(onNext: { isRefreshing in
        print("onNext isRefreshing : \(isRefreshing)")
    }, onError: { err in
        print("err : \(err)")
    }, onCompleted: {
        print("completed")
    }, onDisposed: {
        print("disposed")
    }).disposed(by: disposeBag)

更多用法

您可以参考示例了解更多使用方法。

问题或建议

您可以在GitHub向我提交问题或者发送邮件至[email protected]。如果您有好的想法,告诉我。谢谢。

许可证

ZVRefreshing在MIT许可证的条款和条件下分发。