效果图

具体实现代码如下

ZCWScrollNumView.h文件

#import <UIKit/UIKit.h>typedef enum {ZCWScrollNumAnimationTypeNone,ZCWScrollNumAnimationTypeNormal,ZCWScrollNumAnimationTypeFromLast,ZCWScrollNumAnimationTypeRand,ZCWScrollNumAnimationTypeFast
} ZCWScrollNumAnimationType;@interface ZCWScrollDigitView : UIView {CGFloat _oneDigitHeight;
}@property (retain, nonatomic) UIView *backgroundView;
@property (retain, nonatomic) UILabel *label;
@property (readonly, nonatomic) NSUInteger digit;
@property (retain, nonatomic) UIFont *digitFont;- (void)setDigitAndCommit:(NSUInteger)aDigit;
- (void)setDigitFromLast:(NSUInteger)aDigit;
- (void)setDigit:(NSUInteger)aDigit from:(NSUInteger)last;
- (void)setDigitFast:(NSUInteger)aDigit;
- (void)setRandomScrollDigit:(NSUInteger)aDigit length:(NSUInteger)length;- (void)commitChange;- (void)didConfigFinish;@end@interface ZCWScrollNumView : UIView {NSMutableArray *_numberViews;
}@property (nonatomic) NSUInteger numberSize;
@property (nonatomic) CGFloat splitSpaceWidth;
@property (nonatomic) CGFloat topAndBottomPadding;
@property (readonly, nonatomic) NSUInteger numberValue;
@property (retain, nonatomic) UIView *backgroundView;
@property (retain, nonatomic) UIView *digitBackgroundView;
@property (retain, nonatomic) UIFont *digitFont;
@property (readonly, nonatomic) NSArray *numberViews;
@property (retain, nonatomic) UIColor *digitColor;
@property (nonatomic) NSUInteger randomLength;
- (void)setNumber:(NSUInteger)number withAnimationType:(ZCWScrollNumAnimationType)type animationTime:(NSTimeInterval)timeSpan;- (void)didConfigFinish;
@end

ZCWScrollNumView.m文件

#import "ZCWScrollNumView.h"#define kRandomLength 10
#define kDefaultDigitFont   [UIFont systemFontOfSize:14.0]@implementation ZCWScrollDigitView@synthesize backgroundView;
@synthesize label;
@synthesize digit;
@synthesize digitFont;
- (void)setDigitAndCommit:(NSUInteger)aDigit {self.label.text = [NSString stringWithFormat:@"%zd", aDigit];CGRect rect = self.label.frame;rect.origin.y = 0;rect.size.height = _oneDigitHeight;self.label.numberOfLines = 1;self.label.frame = rect;digit = aDigit;
}
- (void)setDigit:(NSUInteger)aDigit from:(NSUInteger)last{if (aDigit == last) {[self setDigitAndCommit:aDigit];return;}NSMutableString *str = [NSMutableString stringWithFormat:@"%zd", last];int count = 1;if (aDigit > last) {for (int i = (int)last + 1; i < aDigit + 1; ++i) {++count;[str appendFormat:@"\n%d", i];}} else {for (int i = (int)last + 1; i < 10; ++i) {++count;[str appendFormat:@"\n%d", i];}for (int i = 0; i < aDigit + 1; ++i) {++count;[str appendFormat:@"\n%d", i];}}self.label.text = str;self.label.numberOfLines = count;CGRect rect = self.label.frame;rect.origin.y = 0;rect.size.height = _oneDigitHeight * count;self.label.frame = rect;digit = aDigit;
}
- (void)setDigitFromLast:(NSUInteger)aDigit {[self setDigit:aDigit from:self.digit];}- (void)setDigitFast:(NSUInteger)aDigit{self.label.text = [NSString stringWithFormat:@"%zd\n%zd", self.digit, aDigit];self.label.numberOfLines = 2;CGRect rect = self.label.frame;rect.origin.y = 0;rect.size.height = _oneDigitHeight * 2;self.label.frame = rect;digit = aDigit;
}- (void)setRandomScrollDigit:(NSUInteger)aDigit length:(NSUInteger)length{NSMutableString *str = [NSMutableString stringWithFormat:@"%zd", self.digit];for (int i = 1; i < length - 1; ++i) {[str appendFormat:@"\n%d", rand() % 10];}[str appendFormat:@"\n%zd", aDigit];self.label.text = str;self.label.numberOfLines = length;CGRect rect = self.label.frame;rect.origin.y = 0;rect.size.height = _oneDigitHeight * length;self.label.frame = rect;digit = aDigit;}- (void)commitChange{CGRect rect = self.label.frame;rect.origin.y = _oneDigitHeight - rect.size.height;self.label.frame = rect;
}- (void)didConfigFinish{if (self.backgroundView == nil) {self.backgroundView = [[UIView alloc] init];self.backgroundView.backgroundColor = [UIColor grayColor];}CGRect backrect = {{0, 0}, self.frame.size};self.backgroundView.frame = backrect;[self addSubview:self.backgroundView];CGSize size= [@"8" sizeWithFont:self.digitFont];_oneDigitHeight = size.height;CGRect rect = {{(self.frame.size.width - size.width) / 2, (self.frame.size.height - size.height) / 2}, size};UIView *view = [[UIView alloc] initWithFrame:rect];view.backgroundColor = [UIColor clearColor];view.clipsToBounds = YES;rect.origin.x = 0;rect.origin.y = 0;self.label = [[UILabel alloc] initWithFrame:rect];self.label.font = self.digitFont;self.label.backgroundColor = [UIColor clearColor];[view addSubview:self.label];[self addSubview:view];[self setDigitAndCommit:self.digit];}@end@implementation ZCWScrollNumView
@synthesize numberSize;
@synthesize numberValue;
@synthesize backgroundView;
@synthesize digitBackgroundView;
@synthesize digitFont;
@synthesize numberViews = _numberViews;
@synthesize splitSpaceWidth;
@synthesize topAndBottomPadding;
- (id)initWithFrame:(CGRect)frame
{self = [super initWithFrame:frame];if (self) {// Initialization code
        [self initScrollNumView];}return self;
}- (id)initWithCoder:(NSCoder *)aDecoder {if (self = [super initWithCoder:aDecoder]) {[self initScrollNumView];}return self;
}- (void)initScrollNumView {self.numberSize = 1;numberValue = 0;self.splitSpaceWidth = 2.0;self.topAndBottomPadding = 2.0;self.digitFont = kDefaultDigitFont;self.randomLength = kRandomLength;
}
/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect
{// Drawing code
}
*/- (void)setNumber:(NSUInteger)number withAnimationType:(ZCWScrollNumAnimationType)type animationTime:(NSTimeInterval)timeSpan {for (int i = 0; i < numberSize; ++i) {ZCWScrollDigitView *digitView = [_numberViews objectAtIndex:i];NSUInteger digit = [ZCWScrollNumView digitFromNum:number withIndex:i];if (digit != [self digitIndex:i] || type == ZCWScrollNumAnimationTypeRand)switch (type) {case ZCWScrollNumAnimationTypeNone:[digitView setDigit:digit from:digit];break;case ZCWScrollNumAnimationTypeNormal:[digitView setDigit:digit from:0];break;case ZCWScrollNumAnimationTypeFromLast:[digitView setDigitFromLast:digit];break;case ZCWScrollNumAnimationTypeRand:[digitView setRandomScrollDigit:digit length:self.randomLength];break;case ZCWScrollNumAnimationTypeFast:[digitView setDigitFast:digit];default:break;}}[UIView beginAnimations:nil context:nil];[UIView setAnimationDuration:timeSpan];for (ZCWScrollDigitView *digitView in _numberViews) {[digitView commitChange];}[UIView commitAnimations];numberValue = number;
}+ (NSUInteger)digitFromNum:(NSUInteger)number withIndex:(NSUInteger)index {NSUInteger num = number;for (int i = 0; i < index; ++i) {num /= 10;}return num % 10;
}- (NSUInteger)digitIndex:(NSUInteger)index {return [ZCWScrollNumView digitFromNum:self.numberValue withIndex:index];}- (void)didConfigFinish {CGRect backRect = {{0, 0}, self.frame.size};self.backgroundView.frame = backRect;[self addSubview:self.backgroundView];_numberViews = [[NSMutableArray alloc] initWithCapacity:self.numberSize];CGFloat allWidth = self.frame.size.width;CGFloat digitWidth = (allWidth - (self.numberSize + 1) * splitSpaceWidth) / self.numberSize;NSData *digitBackgroundViewData = [NSKeyedArchiver archivedDataWithRootObject:self.digitBackgroundView];for (int i = 0; i < numberSize; ++i) {CGRect rect = {{allWidth - (digitWidth + self.splitSpaceWidth) * (i + 1), self.topAndBottomPadding}, {digitWidth, self.frame.size.height - self.topAndBottomPadding * 2}};ZCWScrollDigitView *digitView = [[ZCWScrollDigitView alloc] initWithFrame:rect];digitView.backgroundView = [NSKeyedUnarchiver unarchiveObjectWithData:digitBackgroundViewData];digitView.digitFont = self.digitFont;[digitView didConfigFinish];[digitView setDigitAndCommit:[self digitIndex:i]];if (self.digitColor != nil) {digitView.label.textColor = self.digitColor;}[_numberViews addObject:digitView];[self addSubview:digitView];}
}
@end

控制端代码

#import "TianJiCeSuanViewController.h"
#import "ZCWScrollNumView.h"
#import "HXSrollAnimalView.h"#define kAllFullSuperviewMask      UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleBottomMargin;@interface TianJiCeSuanViewController ()
@property (weak, nonatomic) IBOutlet UIImageView *BgView;
@property (weak, nonatomic) IBOutlet HXSrollAnimalView *shengxiaoView;
@property (weak, nonatomic) IBOutlet ZCWScrollNumView *weishuView;@end@implementation TianJiCeSuanViewController- (void)viewDidLoad {[super viewDidLoad];//    设置导航栏
    [self setNav];[self setscrollNumer];[self setscrollAnimal];[self.view insertSubview:self.BgView atIndex:0];
}-(void)setscrollNumer{CGRect tmp = self.weishuView.bounds;self.weishuView.numberSize = 3;UIImage *image = [[UIImage imageNamed:@"bj_numbg"] stretchableImageWithLeftCapWidth:10 topCapHeight:14];self.weishuView.backgroundView = [[UIImageView alloc] initWithImage:image];UIView *digitBackView = [[UIView alloc] initWithFrame:tmp];digitBackView.backgroundColor = [UIColor clearColor];digitBackView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;digitBackView.autoresizesSubviews = YES;image = [[UIImage imageNamed:@"money_bg"] stretchableImageWithLeftCapWidth:12 topCapHeight:12];UIImageView *bgImageView = [[UIImageView alloc] initWithImage:image];bgImageView.frame = tmp;bgImageView.autoresizingMask = kAllFullSuperviewMask;[digitBackView addSubview:bgImageView];image = [[UIImage imageNamed:@"money_bg_mask"] stretchableImageWithLeftCapWidth:12 topCapHeight:12];UIImageView *bgMaskImageView = [[UIImageView alloc] initWithImage:image];bgMaskImageView.autoresizingMask = kAllFullSuperviewMask;bgMaskImageView.frame = tmp;[digitBackView addSubview:bgMaskImageView];self.weishuView.digitBackgroundView = digitBackView;self.weishuView.digitColor = [UIColor whiteColor];self.weishuView.digitFont = [UIFont systemFontOfSize:17.0];[self.weishuView didConfigFinish];
}
-(void)setscrollAnimal{CGRect tmp = self.shengxiaoView.bounds;self.shengxiaoView.numberSize = 3;UIImage *image = [[UIImage imageNamed:@"bj_numbg"] stretchableImageWithLeftCapWidth:10 topCapHeight:14];self.shengxiaoView.backgroundView = [[UIImageView alloc] initWithImage:image];UIView *digitBackView = [[UIView alloc] initWithFrame:tmp];digitBackView.backgroundColor = [UIColor clearColor];digitBackView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;digitBackView.autoresizesSubviews = YES;image = [[UIImage imageNamed:@"money_bg"] stretchableImageWithLeftCapWidth:12 topCapHeight:12];UIImageView *bgImageView = [[UIImageView alloc] initWithImage:image];bgImageView.frame = tmp;bgImageView.autoresizingMask = kAllFullSuperviewMask;[digitBackView addSubview:bgImageView];image = [[UIImage imageNamed:@"money_bg_mask"] stretchableImageWithLeftCapWidth:12 topCapHeight:12];UIImageView *bgMaskImageView = [[UIImageView alloc] initWithImage:image];bgMaskImageView.autoresizingMask = kAllFullSuperviewMask;bgMaskImageView.frame = tmp;[digitBackView addSubview:bgMaskImageView];self.shengxiaoView.digitBackgroundView = digitBackView;self.shengxiaoView.digitColor = [UIColor whiteColor];self.shengxiaoView.digitFont = [UIFont systemFontOfSize:17.0];[self.shengxiaoView didConfigFinish];
}-(void)setNav{//    设置导航栏的标题self.navigationItem.title = @"天机测算";//    设置字体
    [self.navigationController.navigationBar setTitleTextAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:19],NSForegroundColorAttributeName:XMGRGBColor(216, 184, 123)}];self.navigationItem.rightBarButtonItem = [UIBarButtonItem itemWithImage:@"ico_share" highImage:@"ico_share" target:self action:@selector(share)];
}-(void)share{}
- (IBAction)qiuShengXiao {self.shengxiaoView.hidden = NO;[self.shengxiaoView setNumber:rand() withAnimationType:HXSScrollNumAnimationTypeRand animationTime:3];}
- (IBAction)qiuWeiShu {self.weishuView.hidden = NO;[self.weishuView setNumber:rand() withAnimationType:ZCWScrollNumAnimationTypeRand animationTime:3];
}
@end

转载于:https://www.cnblogs.com/qianLL/p/5596472.html

iOS 数字滚动 类似于老 - 虎- 机的效果相关推荐

  1. 老-虎-机等转动图片思路

    看了这个标题,围观群众对今天讲解的话题表示不知,好吧,如果列位爱卿见过网站上那些倒计时的应用以及老-虎 机(也叫拉霸,苹果机等,whatever...)(也叫拉霸,苹果机等,whatever...)游 ...

  2. html数字自动滚动代码怎么写,你可能需要这样的大屏数字滚动效果

    大屏数字滚动效果来源于最近工作中一张大屏的UI图,该UI图上有一个模块需要有数字往上翻动的效果,以下是最终实现的效果: 思路 在实现此效果之前,我们先来捋一下思路,用思维导图来设计一下我们的实现步骤, ...

  3. html页面数字滚动,Vue.js大屏可视化数据数字滚动翻转跳转效果(通俗易懂附完整代码)...

    原文:Vue.js大屏可视化数据数字滚动翻转跳转效果(通俗易懂附完整代码) 大屏数字滚动翻转效果来源于最近工作中element后台管理页面一张大屏的UI图,该UI图上有一个模块需要有数字往上翻动的效果 ...

  4. Android RecyclerView实现类似于老虎机抽奖,数字滚动等动画效果

    1.RecyclerViewLoopScrollAnimation项目介绍 RecyclerViewLoopScrollAnimation 适用于Android RecyclerView的循环滚动动画 ...

  5. 抽奖动画 - lao虎机抽奖

    本文介绍一个lao虎机抽奖动画的实现,lao虎机抽奖在各类商家营销活动中非常常见,这里主要介绍动画的实现过程,其他细节不做详细分析. ps:lao虎机是敏感词,博客园的富文本和markdown编辑器都 ...

  6. 抽奖动画 - lao虎机抽奖,手把手教你做一个抽奖机软件

    本文介绍一个lao虎机抽奖动画的实现,lao虎机抽奖在各类商家营销活动中非常常见,这里主要介绍动画的实现过程,其他细节不做详细分析. 1. 需求 UI给到的蓝湖如下截图1 图1 三栏图片,每栏图片是一 ...

  7. WxCountUp - 数字滚动(微信小程序插件)

    github地址 wx-extend 欢迎star~~ 插件介绍 该插件是参照 CountUp.js 封装的,为小程序提供的数字滚动,以更有趣的方式显示数值数据. 参数说明 Params 参数 类型 ...

  8. iOS Sprite Kit教程之真机测试以及场景的添加与展示

    iOS Sprite Kit教程之真机测试以及场景的添加与展示 IOS实现真机测试 在进行真机测试之前,首先需要确保设备已经连在了Mac(或者Mac虚拟机)上,在第1.9.1小节开始,设备就一直连接在 ...

  9. IOS开发基础之摇奖机案例

    IOS开发基础之摇奖机案例 // ViewController.m // 33-摇奖机器 // Created by 鲁军 on 2021/3/9. #import "ViewControl ...

最新文章

  1. 面向对象设计原则之三:里氏替换原则
  2. 在LoadRunner向远程Linux/Unix执行命令行并收集性能数据
  3. adb logcat通过包名过滤(dos命令find后跟变量)
  4. JZOJ 5490. 【清华集训2017模拟11.28】图染色
  5. 零基础也可以实现“机器同传翻译”!
  6. linux大容量硬盘 克隆到小硬盘_Linux添加新硬盘的挂载方法
  7. IIS7.5 部署WCF项目问题集锦
  8. 1×pbs缓冲液配方_PBS缓冲液的配制
  9. 自定义View 进度条
  10. “嘿,我们又见面了!”
  11. JeeWx 捷微二代微信活动平台1.0发布!活动插件持续开源更新!
  12. JAVA面试题(2018)
  13. 对应点集配准的四元数法(ICP算法中的一个关键步骤)
  14. “error LNK2019: 无法解析的外部符号 _main,该符号在函数 ___tmainCRTStartup 中被引用”解决方法。
  15. java发送qq邮件_「java发邮件」Java 通过SMTP实现发送QQ邮件 - seo实验室
  16. android adb 最新版本下载地址,adb工具包2017完整版-安卓adb工具1.0.32 最新完整版下载_东坡手机下载...
  17. 《深入浅出MFC》系列之消息映射(一)
  18. python设置excel表样式
  19. qq邮件exchange服务器,解决Exchange邮件系统无法接收QQ邮件的问题
  20. 清华大学2001年机试-字符串排序-1066

热门文章

  1. 致广大关注《网络规划设计师考试案例梳理、真题透解与强化训练》读者朋友的一封信...
  2. Java Robot对象实现服务器屏幕远程监视
  3. C#2.0实例程序STEP BY STEP--实例二:数据类型
  4. 网友为对百合所唱的最后的挽歌!(节选)
  5. 想挖矿?不如先学习一下以太坊
  6. 引导分区 pbr 数据分析_如何在1小时内引导您的分析
  7. python 桑基图 地理坐标_【转载】Python数据可视化-实现Sankey桑基图
  8. do一下来了一个redux
  9. 用mpvue实现的微信小程序版cnode社区
  10. 【微服务】Spring-Boot整合Consul (自定义服务配置及健康检查)