iOS之实现倒计时功能
2016-01-03 22:56
393 查看
倒计时在发送验证码是常见的功能,怎么实现这个功能。正所谓会者不难,难者不会。在此遍博客来实现一下。具体代码可以参考 倒计时Demo
当触发倒计时的button时,才进行倒计时功能
倒计时完毕时,使button可用即可以再次点击来重新发送
EDCountdown.m
一、实现思路
倒计时功能的实现:当触发倒计时的button时,才进行倒计时功能
倒计时完毕时,使button可用即可以再次点击来重新发送
二、具体代码的实现
EDCountdown.h// // EDCountdown.h // Countdown // // Created by humor on 15/12/31. // Copyright © 2015年 onefiter. All rights reserved. // #import <Foundation/Foundation.h> @class EDCountdown; @protocol EDCountdownDelegate <NSObject> /** * 周期性的通知外界,自创建计时器到当前时间差值 * * @param sender 计时器 * @param timeOffset 自创建计时器到当前时间差值 */ - (void)notifyCountTimeCallBack:(id)sender withTimeOffset:(NSTimeInterval)timeOffset; @end @interface EDCountdown : NSObject @property(nonatomic, weak ) id<EDCountdownDelegate> delegate; @property(nonatomic, assign) BOOL isOpen; @property(nonatomic, assign) NSTimeInterval timeInterval; - (void)handleCountTimerEvent:(id)sender; @end
EDCountdown.m
// // EDCountdown.m // Countdown // // Created by humor on 15/12/31. // Copyright © 2015年 onefiter. All rights reserved. // #import "EDCountdown.h" @interface EDCountdown () @property (nonatomic, strong) NSTimer *timer; @property (nonatomic, assign) NSTimeInterval startTime; @end @implementation EDCountdown - (instancetype)init { if (self = [super init]) { _timeInterval = 1; } return self; } - (void)dealloc { self.isOpen = NO; } - (void)setIsOpen:(BOOL)isOpen { _isOpen = isOpen; __block dispatch_block_t mainBlock = NULL; if (_isOpen) { mainBlock = ^{ if (_timer.isValid) { [_timer invalidate]; } _timer = [NSTimer scheduledTimerWithTimeInterval:_timeInterval target:self selector:@selector(handleCountTimerEvent:) userInfo:nil repeats:YES]; _startTime = CFAbsoluteTimeGetCurrent(); }; } else { mainBlock = ^{ if (_timer.isValid) { [_timer invalidate]; } _timer = nil; }; } if ([NSThread isMainThread]) { mainBlock(); } else { dispatch_async(dispatch_get_main_queue(), mainBlock); } } - (void)handleCountTimerEvent:(id)sender { if ([_delegate respondsToSelector:@selector(notifyCountTimeCallBack:withTimeOffset:)]) { NSTimeInterval deltaTime = CFAbsoluteTimeGetCurrent() - _startTime; [_delegate notifyCountTimeCallBack:self withTimeOffset:deltaTime]; } } @end
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- 讲解iOS开发中基本的定位功能实现
- js判断客户端是iOS还是Android等移动终端的方法
- IOS开发环境windows化攻略
- 浅析iOS应用开发中线程间的通信与线程安全问题
- 检测iOS设备是否越狱的方法
- .net平台推送ios消息的实现方法
- 探讨Android与iOS,我们将何去何从?
- Android、iOS和Windows Phone中的推送技术详解
- IOS 改变键盘颜色代码
- 举例详解iOS开发过程中的沙盒机制与文件
- Android和IOS的浏览器中检测是否安装某个客户端的方法
- 分享一个iOS下实现基本绘画板功能的简单方法
- javascript实现阻止iOS APP中的链接打开Safari浏览器