使用CADisplayLink写秒表

效果:

源码:

StopWatch.h 与 StopWatch.m

//
// StopWatch.h
// ShowTime
//
// Created by YouXianMing on 14-10-16.
// Copyright (c) 2014年 YouXianMing. All rights reserved.
// #import <Foundation/Foundation.h> @protocol StopWatchDelegate <NSObject>
- (void)stopWatchDate:(NSDate *)date;
@end // 说明:此秒表类是基于CADisplayLink所写,每一帧刷新一次
@interface StopWatch : NSObject @property (nonatomic, assign) id<StopWatchDelegate> delegate; - (void)start; // 开始
- (void)stop; // 停止
- (void)reset; // 复位
- (NSDate *)gainDate; // 获取时间(只有在start的时候获取时间才有意义,stop之后返回值为0) @end
//
// StopWatch.m
// ShowTime
//
// Created by YouXianMing on 14-10-16.
// Copyright (c) 2014年 YouXianMing. All rights reserved.
// #import "StopWatch.h" @interface StopWatch () @property (nonatomic, strong) CADisplayLink *countDownTimer;
@property (nonatomic, strong) NSDate *startDate;
@property (nonatomic, strong) NSDate *pausedDate; @property (nonatomic, assign) BOOL startFlag; @end @implementation StopWatch - (void)start {
_startFlag = YES; if (_countDownTimer) {
[_countDownTimer invalidate];
_countDownTimer = nil;
} if (_countDownTimer == nil) {
if(_startDate == nil) {
_startDate = [NSDate date];
} if(_pausedDate != nil){
NSTimeInterval countedTime = [_pausedDate timeIntervalSinceDate:_startDate];
_startDate = [[NSDate date] dateByAddingTimeInterval:-countedTime];
_pausedDate = nil;
} _countDownTimer = [CADisplayLink displayLinkWithTarget:self selector:@selector(timerRunEvent)];
_countDownTimer.frameInterval = ;
[_countDownTimer addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes];
}
} - (void)stop {
_startFlag = NO;
if (_countDownTimer) {
[_countDownTimer invalidate];
_countDownTimer = nil;
_pausedDate = [NSDate date];
}
} - (void)reset {
_pausedDate = nil;
_startDate = [NSDate date]; if (_delegate) {
NSTimeInterval currentToSpecifyDuration = [[[NSDate alloc] init] timeIntervalSinceDate:_startDate];
NSDate *date = [NSDate dateWithTimeIntervalSince1970:currentToSpecifyDuration];
[_delegate stopWatchDate:date];
}
} - (NSDate *)gainDate {
if (_startFlag) {
NSTimeInterval currentToSpecifyDuration = [[[NSDate alloc] init] timeIntervalSinceDate:_startDate];
NSDate *date = [NSDate dateWithTimeIntervalSince1970:currentToSpecifyDuration];
return date;
} else {
return nil;
}
} - (void)timerRunEvent {
if (_delegate) {
NSTimeInterval currentToSpecifyDuration = [[[NSDate alloc] init] timeIntervalSinceDate:_startDate];
NSDate *date = [NSDate dateWithTimeIntervalSince1970:currentToSpecifyDuration];
[_delegate stopWatchDate:date];
}
} - (void)dealloc {
NSLog(@"xxxxxx");
} @end

注意:富文本显示的秒表并不是这个类的功能而已:)

使用CADisplayLink写秒表的更多相关文章

  1. JavaScript写秒表

    1.HTML部分 <div id="div1"> <span id="hour">00</span> <span> ...

  2. 利用纯代码写出一个秒表表盘的方法 —— #DF

    @interface ViewController () @property (nonatomic, strong) CALayer *secLayer; // 秒针layer @property ( ...

  3. CADisplayLink以及和NSTimer的区别

    什么是CADisplayLink CADisplayLink是一个能让我们以和屏幕刷新率相同的频率将内容画到屏幕上的定时器.我们在应用中创建一个新的 CADisplayLink 对象,把它添加到一个r ...

  4. iOS开发中深入理解CADisplayLink和NSTimer

    一.什么是CADisplayLink 简单地说,它就是一个定时器,每隔几毫秒刷新一次屏幕. CADisplayLink是一个能让我们以和屏幕刷新率相同的频率将内容画到屏幕上的定时器.我们在应用中创建一 ...

  5. Core Animation系列之CADisplayLink

    一直以来都想好好学习下CoreAnimation,奈何涉及的东西太多,想要一次性全部搞定时间上不允许,以后会断断续续的补全.最近项目里用到了CADisplayLink,就顺便花点时间看了看. 一.简介 ...

  6. C# 一个简单的秒表引发的窗体卡死问题

    一个秒表程序也是我的一个心病,因为一直想写这样的一个东西,但是总往GUI那边想,所以就比较怵,可能是上学的时候学MFC搞出的后遗症吧,不过当我今天想好用Win Form(话说还是第一次写win for ...

  7. CADisplayLink

    什么是CADisplayLink CADisplayLink是一个能让我们以和屏幕刷新率相同的频率将内容画到屏幕上的定时器.我们在应用中创建一个新的 CADisplayLink 对象,把它添加到一个r ...

  8. Android(java)学习笔记134:Handler用法总结 和 秒表案例

    一.Handler的定义: Handler主要接收子线程发送的数据, 并用此数据配合主线程更新UI,用来跟UI主线程交互用.比如可以用handler发送一个message,然后在handler的线程中 ...

  9. Core Animation系列之CADisplayLink(转)

    转自 http://www.tuicool.com/articles/meMVR3 一直以来都想好好学习下CoreAnimation,奈何涉及的东西太多,想要一次性全部搞定时间上不允许,以后会断断续续 ...

随机推荐

  1. Spring Boot 的彩色日志

    springboot的彩色日志灰常漂亮, 看起来也很舒服. 但是自定义的日志就是一纯白色的, 丑到不行. 所以就copy他的彩色日志来养眼: <!-- 彩色日志 --> <!-- 彩 ...

  2. 堆排序详解以及java实现

    前言 临近毕业,开始找工作,近期一直在看算法导论(CLRS)同时各种刷题.希望以后有时间把所有学习心得和刷题心得记录下来. 堆 堆排序和合并排序一样,是一种时间复杂度为O(nlgn)的算法,同时和插入 ...

  3. < Python Index >

    1. 基本语法   1.1 常量/变量   1.2 运算符   1.3 表达式   1.4 程序结构 2. 内置数据结构    2.1 列表    2.2 元组    2.3 集合    2.4 st ...

  4. Qt Model View 框架

    Model-View及Qt实现 Model-View-Controller架构最早出现在SmallTalk语言中,至今出现了很多变体. Model是负责维护数据(如管理数据库),View负责显示与用户 ...

  5. BOM-使用定时器

    window对象包含4个定时器专用方法,说明如下表所示,使用它们可以实现代码定时运行,避免连续执行,这样可以设计动画 方法 说明 setInterval() 按照指定的周期,(以毫秒为单位)来调用函数 ...

  6. JQuery判断浏览器类型(IE, Firefox…)

        1 2 3 4 5 6 7 8 9 10 11 $(function() {     if ($.browser.msie) {         alert("这是一个IE浏览器&q ...

  7. [日常] MySQL内存不足启动失败的解决方法

    1.启动mysql时,一直不成功,查看错误日志 /var/log/mysql/error.log 2.主要的错误信息有如下几条: [ERROR] InnoDB: mmap(136151040 byte ...

  8. JSTL判断list是否为空

    1.先在jsp页面中导入下列类库. <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" ...

  9. 【原】使用Maven完成自动化打包并部署到Linux服务器下(Tomcat7)

    最近在使用maven,顺便尝试了下tomcat部署.网上找到了很多资料但是都不是最新的,所以贴上比较新的Tomcat7部署代码和配置,方便以后回顾-->测试OK. 1. 首先是配置Tomcat ...

  10. 软件架构系列二:Clean架构

    外圈的层次可以依赖内层,反之不可以:内圈核心的实体代表业务,不可以依赖其所处的技术环境. 这是著名软件大师Bob大叔提出的一种架构,也是当前各种语言开发架构.干净架构提出了一种单向依赖关系,从而在逻辑 ...