首页 > 代码库 > 使用CADisplayLink写秒表
使用CADisplayLink写秒表
使用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 = 1; [_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写秒表
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。