一个可以在 Swift 中以动画形式显示数字变化的标签,灵感来源于 UICountingLabel

中文介绍

概述

示例

要运行示例项目,请克隆 repo,并首先从 Example 目录运行 pod install

要求

安装

CocoaPods

EFCountingLabel 可以通过 CocoaPods 获得。 要安装它,只需将以下行添加到您的 Podfile 中

pod 'EFCountingLabel'

Swift Package Manager

Swift Package Manager 是一种用于自动化 Swift 代码分发的工具,并且已集成到 Swift 编译器中。

设置好 Swift 包后,将 EFCountingLabel 添加为依赖项就像将其添加到您的 Package.swiftdependencies 值中一样简单。

dependencies: [
    .package(url: "https://github.com/EFPrefix/EFCountingLabel.git", .upToNextMinor(from: "6.0.0.0"))
]

设置

只需以设置常规 UILabel 相同的方式初始化 EFCountingLabel

let myLabel = EFCountingLabel(frame: CGRect(x: 10, y: 10, width: 200, height: 40))
self.view.addSubview(myLabel)

您也可以将其添加到您的 xibstoryboard 中,只需确保将类和模块设置为 EFCountingLabel

使用

设置标签的格式。 这将被字符串填充(取决于您的格式化方式)在更新时,您可以提供一个 formatBlock,它允许更好地控制文本的格式化方式。 如果未提供,则默认格式为 "%d"

myLabel.setUpdateBlock { value, label in
    label.text = String(format: "%.2f%%", value)
}

(可选)设置计时函数。 默认值为 EFTimingFunction.linear,在到达末尾之前不会改变速度。 其他选项在下面的“方法”部分中描述。

myLabel.counter.timingFunction = EFTimingFunction.easeOut(easingRate: 3)

当您希望标签开始计数时,只需调用

myLabel.countFrom(5, to: 100)

您还可以指定持续时间。 默认值为 2.0 秒。

myLabel.countFrom(1, to: 10, withDuration: 3.0)

您可以使用常见的便捷方法进行计数,例如

myLabel.countFromCurrentValueTo(100)
myLabel.countFromZeroTo(100)

在后台,这些便捷方法使用一个基本方法,它具有以下完整签名

myLabel.countFrom(startValue: CGFloat, to: CGFloat, withDuration: TimeInterval)

您可以使用 currentValue 方法获取标签的当前值(在动画过程中也可以正常工作)

let currentValue: CGFloat = myLabel.counter.currentValue

(可选)您可以指定一个 completionBlock,以在标签完成计数后执行一个动作

myLabel.completionBlock = { () in
    print("finish")
}

模式

目前有四种计数模式。

作者

EyreFree, eyrefree@eyrefree.org

许可证

EFCountingLabel 在 MIT 许可证下可用。 有关更多信息,请参见 LICENSE 文件。