html读秒倒计时,读秒倒计时
前些日子,项目中用到一个倒计时读秒的功能。其实实现起来很简单,就是通过改变 label 的transform。经过封装一句代码就可以引入项目中。
/**
@param number 倒计时起始时间
@param endTitle 倒计时结束字符串
@param beginCount 倒计时开始回调
@param finishCount 倒计时结束回调
*/
[GGCountDownLabel gg_countDownWithBeginNumber:5 endTitle:@"第一个控制器" begin:nil finished:nil];
先看下效果:
读秒倒计时.gif
因为代码很简单,所以就直接贴出来了
.h 文件中的代码
#import
typedef void(^countDownBeginCallBack)();
typedef void(^countDownFinishedCallBack)();
@interface GGCountDownLabel : UILabel
/**
开始倒计时
@param number 倒计时起始时间
@param endTitle 倒计时结束字符串
@param beginCount 倒计时开始回调
@param finishCount 倒计时结束回调
*/
+ (instancetype)gg_countDownWithBeginNumber:(NSInteger)number
endTitle:(NSString *)endTitle
begin:(countDownBeginCallBack)beginCount
finished:(countDownFinishedCallBack)finishCount;
/**
隐藏
*/
+ (void)gg_hidden;
@end
.m文件中的代码
#import "GGCountDownLabel.h"
#import "AppDelegate.h"
#define GGScreenWith [UIScreen mainScreen].bounds.size.width
#define GGScreenHeight [UIScreen mainScreen].bounds.size.height
#define GGAppDelegate ((AppDelegate *)([UIApplication sharedApplication].delegate))
@interface GGCountDownLabel ()
@property (nonatomic, assign) NSInteger number;
@property (nonatomic, copy) NSString *endTitle;
@property (nonatomic, copy) countDownBeginCallBack beginCount;
@property (nonatomic, copy) countDownFinishedCallBack finishCount;
@end
@implementation GGCountDownLabel
BOOL isAnimating;
/** 单例初始化 */
+ (instancetype)shareCountDownLabel
{
static GGCountDownLabel *_instance;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_instance = [[GGCountDownLabel alloc] init];
});
return _instance;
}
+ (instancetype)gg_countDownWithBeginNumber:(NSInteger)number endTitle:(NSString *)endTitle begin:(countDownBeginCallBack)beginCount finished:(countDownFinishedCallBack)finishCount
{
GGCountDownLabel *countDownLabel = [GGCountDownLabel shareCountDownLabel];
//** 防止重叠动画 */
if (isAnimating) return nil;
//默认倒计时为三秒
countDownLabel.number = 3;
if (number && number > 0) countDownLabel.number = number;
if (endTitle && endTitle.length > 0) countDownLabel.endTitle = endTitle;
if (beginCount) countDownLabel.beginCount = beginCount;
if (finishCount) countDownLabel.finishCount = finishCount;
[self gg_configLabel:countDownLabel];
[self gg_scaleActionWithLabel:countDownLabel beginBlock:beginCount finishedBlock:finishCount];
return countDownLabel;
}
/** 配置 label 的基本属性 */
+ (void)gg_configLabel:(GGCountDownLabel *)label
{
label.hidden = NO;
label.frame = CGRectMake(0, 0, GGScreenWith, GGScreenHeight/2);
label.center = CGPointMake(GGScreenWith/2, GGScreenHeight/2);
label.transform = CGAffineTransformScale(label.transform, 15, 15);
label.alpha = 0;
label.text = [NSString stringWithFormat:@"%zd",label.number];
label.textColor = [UIColor whiteColor];
label.font = [UIFont boldSystemFontOfSize:12];
label.textAlignment = NSTextAlignmentCenter;
[[label gg_getCurrentSuperView] addSubview:label];
}
// 获取当前显示的控制器的View
- (UIView *)gg_getCurrentSuperView
{
return [self gg_getVisibleViewControllerFrom:(UIViewController *)GGAppDelegate.window.rootViewController].view;
}
- (UIViewController *)gg_getVisibleViewControllerFrom:(UIViewController*)vc
{
if ([vc isKindOfClass:[UINavigationController class]]) {
return [self gg_getVisibleViewControllerFrom:[((UINavigationController*) vc) visibleViewController]];
}else if ([vc isKindOfClass:[UITabBarController class]]){
return [self gg_getVisibleViewControllerFrom:[((UITabBarController*) vc) selectedViewController]];
} else {
if (vc.presentedViewController) {
return [self gg_getVisibleViewControllerFrom:vc.presentedViewController];
} else {
return vc;
}
}
}
/** 倒计时动画 */
+ (void)gg_scaleActionWithLabel:(GGCountDownLabel *)label beginBlock:(countDownBeginCallBack)beginCount finishedBlock:(countDownFinishedCallBack)finishCount
{
if (!isAnimating) {
if (label.beginCount) {
label.beginCount();
}
}
if (label.number >= (label.endTitle.length ? 0 : 1 )) {
isAnimating = YES;
label.text = label.number == 0 ? label.endTitle : [NSString stringWithFormat:@"%zd",label.number];
[UIView animateWithDuration:1.0 animations:^{
label.alpha = 1;
label.transform = CGAffineTransformIdentity;
} completion:^(BOOL finished) {
if (finished) {
label.number --;
label.alpha = 0;
label.transform = CGAffineTransformScale(label.transform, 15, 15);
[self gg_scaleActionWithLabel:label beginBlock:beginCount finishedBlock:finishCount];
}
}];
}else {
if (label.finishCount) label.finishCount();
[self gg_hidden];
}
}
/** 隐藏 */
+ (void)gg_hidden
{
isAnimating = NO;
[GGCountDownLabel shareCountDownLabel].transform = CGAffineTransformIdentity;
[GGCountDownLabel shareCountDownLabel].hidden = YES;
[[GGCountDownLabel shareCountDownLabel] removeFromSuperview];
}
@end
html读秒倒计时,读秒倒计时相关推荐
- android 按钮倒计时读秒
最近项目中有涉及到android倒计时读秒功能的实现,于是上网搜了一下,各种方式都有,但是感觉要么存在bug,要么有点复杂,于是在参考了一些他人的实现方式后,自己写了一个. 代码如下: public ...
- android 日倒计时计算器,倒计时(倒数日在线计算)
2.这个程序得到火箭专家们的一致赞许,而且超越了使用范围,在这部影片中,扣. 它的意义有二.1"点火的发射程序:倒计时,成为一个适用性极强."倒计时"这一. 正计时 原因 ...
- JS-实现秒表倒计时+缓存倒计时
实现秒表倒计时+缓存倒计时功能 <!DOCTYPE html> <html><head><meta charset="UTF-8"> ...
- setInterval 倒计时 清除倒计时 clearInterval
倒计时清除 setInterval 倒计时5s后跳转页面, clearInterval(this.handler); 清除倒计时 不执行倒计时里面的跳转, 点击事件强制跳转到其他页面 并且清除 倒计时 ...
- 华为手机日历倒计时_倒计时40小时!谁来拿走这台华为手机?
最近小编发现最新款的华为mate40很难买出现了一机难求的现象线上订不到,线下又限购 但是!掌心商城为你准备了现在有一个机会只要花1元钱,就有机会赢得华为最新款5G手机HUAWEI Mate 40 方 ...
- php mysql倒计时_php 倒计时程序
测试页面 //获取系统时间,将时间以指定格式显示到页面. function systemTime() { //获取系统时间. var dateTime=new Date(); var YY=dateT ...
- java源代码实例倒计时_Java倒计时三种实现方式代码实例
写完js倒计时,突然想用java实现倒计时,写了三种实现方式 一:设置时长的倒计时: 二:设置时间戳的倒计时: 三:使用java.util.Timer类实现的时间戳倒计时 代码如下: package ...
- 电脑时钟倒计时_倒计时久坐休息提醒工具
现在上班大家都需要坐在电脑前办公,一坐就是一整天.回到家,依然是坐着吃饭.坐着休息,导致了现代都市人颈椎病高发.久坐不仅对颈椎不好,对腰椎.脊柱等不利. 自己一直没有找到合适的倒计时久坐休息提醒工具, ...
- 固定日期时间倒计时,倒计时不可点击,普通倒计时
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
最新文章
- More Effective C++:理解new和delete
- php父子遍历,php无限分类父子追溯方法
- 结构体引用_C/C++结构体完全攻略
- 【JUnit 报错】 method initializationerror not found:JUnit4单元测试报错问题
- java变量自增题的分解08251944
- 某项目网络实施中的几个关键点解析
- hbuild 编译 php,Hbuilder的PHP环境搭建
- 用实际的软件编程示例解释C#中的装饰器模式
- linux工具-journalctl查询日志
- Java 类和Static关键字
- 视频转rtmp流及搭建视频流服务器
- 路由器选华硕还是tp_家用选TP-LINK路由器好还是华为路由器好
- 如何在Microsoft Word里面插入图片作为背景/封面?
- 如何添加二级域名(图文超级详细)
- 从coursera网站自动下载网课视频(Linux中bash操作)
- (poj 2377)Kruskal算法 最大生成树
- 湘潭大学计算机组成原理试卷,湘潭大学11级原理课堂测验题集.ppt
- part-4 运放噪声快速计算
- 获取美元人民币实时汇率-Python版
- 初次安装mysql 如何启动_CentOS第一次安装MySQL的完整步骤
热门文章
- JAVA实现Excel照相机功能_Excel如何将工作表转换为图片,并随着数据的变化自动更新?...
- 每天一点产品思考(3):“稍后阅读”功能真的能有效解决碎片信息处理问题吗?...
- WML 中文参考手册
- asp.net core webAPI学习笔记(三)资源请求
- 15.CUDA编程手册中文版---附录K CUDA计算能力
- CoreAudioApi-音频端点设备-检测耳机插拔
- diskgenius创建efi分区_复制文件到当前分区
- 8.10 12.1-12.5
- mac 配置mysql
- 商品货架管理(愿疫情早日消散,大家去见想见的人)