一个在 Swift 中显示数字变化的动画标签,灵感来源于 UICountingLabel。
概览
示例
要运行示例项目,首先从仓库克隆,然后从 Example 目录运行 pod install
。
要求
版本 | 需求 |
---|---|
1.x | Xcode 8.0+ Swift 3.0+ iOS 8.0+ |
4.x | Xcode 9.0+ Swift 4.0+ iOS 8.0+ |
5.x | Xcode 10.0+ Swift 5.0+ iOS 8.0+ |
安装
EFCountingLabel 通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile 中
pod 'EFCountingLabel'
设置
只需像设置常规 UILabel
一样初始化 EFCountingLabel
let myLabel = EFCountingLabel(frame: CGRect(x: 10, y: 10, width: 200, height: 40))
self.view.addSubview(myLabel)
您还可以将其添加到您的 xib
或 storyboard
,只需确保将类和模块设置为 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")
}
模式
目前有四种计数模式。
- EFTimingFunction.linear:从起点线性计数到终点;
- EFTimingFunction.easeIn: Ease In 开始速度较慢,加速计数并在达到终点时突然停止,停止在最终值;
- EFTimingFunction.easeOut:Ease Out 开始较快,并在达到目标值时减速。
- EFTimingFunction.easeInOut: 缓冲进出效果开始速度较慢,中间加快,然后接近目的地时速度减慢。这是一条优美、平滑且视觉效果良好的曲线,是默认方法;
- EFTimingFunction.easeInBounce;
- EFTimingFunction.easeOutBounce.
使用 EFCountingLabel 的应用
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
作者
EyreFree, [email protected]
许可信息
EFCountingLabel 在 MIT 许可下可用。有关更多信息,请参阅 LICENSE 文件。