LiveGiftShowNumberView.m 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. //
  2. // LiveGiftShowNumberView.m
  3. // LiveSendGift
  4. //
  5. // Created by Jonhory on 2016/11/11.
  6. // Copyright © 2016年 com.wujh. All rights reserved.
  7. //
  8. #import "LiveGiftShowNumberView.h"
  9. #import "Masonry.h"
  10. #import "MSNumberScrollAnimatedView.h"
  11. @interface LiveGiftShowNumberView ()
  12. @property (nonatomic, strong) MSNumberScrollAnimatedView *numLab;
  13. @property (nonatomic ,assign) NSInteger lastNumber;/**< 最后显示的数字 */
  14. @property (nonatomic ,assign) NSInteger oldNumber;/**< 最后显示的数字 */
  15. @end
  16. @implementation LiveGiftShowNumberView
  17. @synthesize number = _number;
  18. - (void)setNumber:(NSInteger)number{
  19. self.lastNumber = number;
  20. }
  21. - (NSInteger)number{
  22. _number = self.lastNumber ;
  23. self.lastNumber += 1;
  24. return _number;
  25. }
  26. - (NSInteger)mo_AddNumWith:(NSInteger)num{
  27. self.oldNumber = _number;
  28. _number = self.lastNumber + num ;
  29. self.lastNumber = _number;
  30. return _number;
  31. }
  32. /**
  33. 获取显示的数字
  34. @return 显示的数字
  35. */
  36. - (NSInteger)getLastNumber{
  37. return self.lastNumber - 1;
  38. }
  39. /**
  40. 改变数字显示
  41. @param numberStr 显示的数字
  42. */
  43. - (void)changeNumber:(NSInteger)number{
  44. if (number <= 0) {
  45. return;
  46. }
  47. if(self.oldNumber == 0){
  48. self.oldNumber = 1;
  49. }
  50. NSString *numberString = [NSString stringWithFormat:@"%zd", number];
  51. [self.numLab mas_updateConstraints:^(MASConstraintMaker *make) {
  52. make.width.mas_equalTo(numberString.length * 20);
  53. }];
  54. [self.numLab setNeedsLayout];
  55. [self.numLab layoutIfNeeded];
  56. if((number - self.oldNumber) < 6){//不需要滚动动画
  57. [self.numLab setNumber:@(number)];
  58. [self.numLab stopAnimation];
  59. } else{//需要滚动动画
  60. //滚动动画需要在外面执行完缩放动画完后才去执行
  61. dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
  62. [self.numLab setNumber:@(number)];
  63. [self.numLab startAnimation];
  64. });
  65. }
  66. [self layoutIfNeeded];
  67. }
  68. - (MSNumberScrollAnimatedView *)numLab {
  69. if (!_numLab) {
  70. _numLab = [[MSNumberScrollAnimatedView alloc] initWithVipType:self.vipType];
  71. _numLab.isAscending = YES;
  72. [self addSubview:_numLab];
  73. [_numLab mas_makeConstraints:^(MASConstraintMaker *make) {
  74. make.centerY.right.mas_equalTo(0);
  75. make.height.mas_equalTo(23);
  76. make.width.mas_equalTo(20);
  77. }];
  78. }
  79. return _numLab;
  80. }
  81. @end