为 UILabel 添加计数动画支持,Swift 实现,受 UICountingLabel 启发。
- 利用
git clone
命令下载本仓库; - 利用 cd 命令切换到 Example 目录下,执行
pod install
命令; - 随后打开
EFCountingLabel.xcworkspace
编译即可。
或执行以下命令:
git clone [email protected]:EFPrefix/EFCountingLabel.git; cd EFCountingLabel/Example; pod install; open EFCountingLabel.xcworkspace
版本 | 需求 |
---|---|
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 9.0+ Swift 5.0+ iOS 8.0+ |
EFCountingLabel 可以通过 CocoaPods 进行获取。只需要在你的 Podfile 中添加如下代码就能实现引入:
pod 'EFCountingLabel'
然后,执行如下命令即可:
pod install
初始化 EFCountingLabel
的方式和普通的 UILabel
是一样的:
let myLabel = EFCountingLabel(frame: CGRect(x: 10, y: 10, width: 200, height: 40))
self.view.addSubview(myLabel)
你也可以用在 xib
或 storyboard
中,前提是你在模块引用中引入了 EFCountingLabel
。
设置标签格式. 设置标签格式后,标签会在更新数值的时候以你设置的方式填充,默认是显示 float 类型的数值,也可以设置成显示 int 类型的数值,比如下面的代码:
myLabel.format = "%d"
另外,你也可以使用 formatBlock
,这个可以对显示的文本格式进行更加高度的自定义:
myLabel.formatBlock = {
(value) in
return "Score: " + (formatter.string(from: NSNumber(value: Int(value))) ?? "")
}
除此之外还有一个 attributedFormatBlock
用于设置属性字符串的格式,用法和上面的 block 类似。如果指定了以上两个 formatBlock
中的任意一个,它将会覆盖掉 format
属性,因为 block 的优先级更高。
可选项,设置动画样式,默认的动画样式是 EFLabelCountingMethod.linear
,这个样式是匀速显示动画。以下将介绍其他动画样式及用法:
myLabel.method = .easeOut
需要计数时只需要使用以下方法即可:
myLabel.countFrom(5, to: 100)
可以指定动画的时长,默认时长是 2.0 秒。
myLabel.countFrom(1, to: 10, withDuration: 3.0)
另外,也可以使用 animationDuration
属性去设置动画时长。
myLabel.animationDuration = 1.0
可以使用便利方法计数,例如:
myLabel.countFromCurrentValueTo(100)
myLabel.countFromZeroTo(100)
本质上,这些便利方法都是基于一个总方法封装的,以下就是这个方法完整的声明:
myLabel.countFrom(
startValue: CGFloat,
to: CGFloat,
withDuration: TimeInterval
)
可以使用 currentValue
方法获得当前数据(即使在动画过程中也可以正常获得):
let currentValue = myLabel.currentValue()
可选项,可以使用 completionBlock
获得动画结束的事件:
myLabel.completionBlock = {
() in
print("finish")
}
当设置 format
属性后,标签会检测是否有 %[^fega]*[diouxc]
格式,如果能找到,就会将内容以 Int
类型展示。否则,将会使用默认的 CGFloat
类型展示。
假如你需要以 CGFloat
类型展示,最好设置小数点位数限制,例如使用 @"%.1f"
来限制只显示一位小数。
因为使用了标准的 String(format: String, arguments: CVarArg...)
方法,你可以按照自己的意愿自定义格式,例如:@"Points: %i"
。
当前有多种动画模式:
- EFLabelCountingMethod.linear:匀速计数动画,是默认采用的动画样式;
- EFLabelCountingMethod.easeIn:开始比较缓慢,快结束时加速,结束时突然停止;
- EFLabelCountingMethod.easeOut:开始速度很快,快结束时变得缓慢;
- EFLabelCountingMethod.easeInOut:开始时比较缓慢,中间加速,快结束时减速。动画速度是一个平滑的曲线。
- ...
EyreFree, [email protected]
EFCountingLabel 基于 MIT 协议进行分发和使用,更多信息参见 协议文件。