数字金额加减动效 - PPCounter

在网上看到了一个数字金额加减动效的东西,觉得不错,做个推荐

然后就找度娘学习下了相关经验,受到这篇博客的启发:ios核心动画高级技巧,使用CADisplayLink定时器来做此动效的引擎(其实使用NSTimer和GCD定时器也可以做到,但使用CADisplayLink最佳)。

现在我已经将此效果从项目中分拆出来,独立封装好了,调用一句代码就可以实现数字加减的动效
  • 支持UILable/UIButton/自定义文本控件的数字加减动画;

  • 支持一般文本属性以及富文本属性的字体显示;

  • 支持四种时间曲线函数动画:由慢到快再到慢、由慢到特别快、由快到慢、匀速;

  • 支持自定义的文本格式,例如:数字格式化千分位显示;

  • 支持CocoaPods导入

PPCounter.gif

代码部分

1.1 设置一般字体属性UILabel
1
2
3
4
5
6
7
....
[label pp_fromNumber:0 toNumber:100 duration:1.5 animationType:PPCounterAnimationTypeEaseOut formatBlock:^NSString *(CGFloat number) {
     // 此处自由拼接内容
     return  [NSString stringWithFormat:@ "%.2f" ,number];
} completeBlock:^{
     // 完成的回调
}];

1.2 设置富文本字体属性UILabel

1
2
3
4
5
6
7
8
9
....
[label pp_fromNumber:0 toNumber:100 duration:1.5 animationType:PPCounterAnimationTypeEaseOut attributedFormatBlock:^NSAttributedString *(CGFloat number) {
 
     // 此处自由设置富文本属性的内容
     NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:@ "" ];
     return  attributedString;
} completeBlock:^{
     // 完成的回调
}];

2. UIButton

1.1 设置一般字体属性UIButton
1
2
3
4
5
6
7
....
[button pp_fromNumber:0 toNumber:100 duration:1.5 animationType:PPCounterAnimationTypeEaseOut formatBlock:^NSString *(CGFloat number) {
     // 此处自由拼接内容
     return  [NSString stringWithFormat:@ "%.2f" ,number];
} completeBlock:^{
     // 完成的回调
}];
1.2 设置富文本字体属性UIButton

1
2
3
4
5
6
7
8
9
10
....
[button pp_fromNumber:0 toNumber:100 duration:1.5 animationType:PPCounterAnimationTypeEaseOut attributedFormatBlock:^NSAttributedString *(CGFloat number) {
 
     // 此处自由设置富文本属性的内容
     NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:@ "" ];
     return  attributedString;
} completeBlock:^{
 
     // 完成的回调
}];

以上就是PPCounter的简单使用方法,更详细的用法请看Demo : https://github.com/jkpang/PPCounter, 欢迎Star,欢迎Fork!


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这个问题涉及到了按键输入和数码管显示,需要借助51单片机的IO口和定时器来实现。以下是一个简单的示例代码,可以实现按键加减和数码管显示0-9999的功能: ``` #include <reg51.h> sbit KEY_PLUS = P1^0; // 加键 sbit KEY_MINUS = P1^1; // 减键 sbit LED_A = P2^0; // 数码管A段 sbit LED_B = P2^1; // 数码管B段 sbit LED_C = P2^2; // 数码管C段 sbit LED_D = P2^3; // 数码管D段 sbit LED_E = P2^4; // 数码管E段 sbit LED_F = P2^5; // 数码管F段 sbit LED_G = P2^6; // 数码管G段 sbit LED_DP = P2^7; // 数码管小数点 unsigned int num = 0; // 数值 void delay(unsigned int t) // 延时函数 { unsigned int i, j; for (i = 0; i < t; i++) { for (j = 0; j < 125; j++); } } void display(unsigned int n) // 数码管显示函数 { unsigned int a, b, c, d; if (n > 9999) { // 数值超出范围,显示8888 a = 8; b = 8; c = 8; d = 8; } else { // 数值在范围内,分别计算千位、百位、十位和个位 a = n / 1000; b = n % 1000 / 100; c = n % 100 / 10; d = n % 10; } LED_A = ~(a == 0 ? 0x7f : 1 << (a - 1)); // 数码管A段 LED_B = ~(b == 0 && a == 0 ? 0x7f : 1 << (b - 1)); // 数码管B段 LED_C = ~(c == 0 && a == 0 && b == 0 ? 0x7f : 1 << (c - 1)); // 数码管C段 LED_D = ~(d == 0 && a == 0 && b == 0 && c == 0 ? 0x7f : 1 << (d - 1)); // 数码管D段 LED_E = LED_F = LED_G = LED_DP = 0xff; // 关闭E、F、G段和小数点 } void main() { while (1) { if (!KEY_PLUS) { // 按下加键 delay(10); // 延时消抖 if (!KEY_PLUS) { // 确认按键按下 num++; if (num > 9999) { // 数值超出范围,循环回0 num = 0; } display(num); while (!KEY_PLUS); // 等待按键释放 } } else if (!KEY_MINUS) { // 按下减键 delay(10); // 延时消抖 if (!KEY_MINUS) { // 确认按键按下 num--; if (num < 0) { // 数值超出范围,循环到9999 num = 9999; } display(num); while (!KEY_MINUS); // 等待按键释放 } } } } ``` 以上代码使用P1口的0号和1号引脚作为加减键输入,P2口的0-7号引脚作为数码管显示输出。当按下加键时,数值加1并显示在数码管上;当按下减键时,数值减1并显示在数码管上。当数值超出0-9999的范围时,会循环到相应的值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值