通过屏幕刷新显示实时时间、倒计时
通过屏幕刷新显示实时时间、倒计时
获取屏幕刷新率
@property (nonatomic, strong) CADisplayLink *displayLink;
- (void)viewDidLoad {
[super viewDidLoad];
self.displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(onDisplayLink:)];
self.displayLink.preferredFramesPerSecond = 10; // 首选每秒刷新次数,不设置则为屏幕最大刷新率,一般为 60(HZ)
[self.displayLink addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSRunLoopCommonModes];
}
- (void)onDisplayLink:(CADisplayLink *)displayLink {
NSLog(@"每秒 60 次");
}
全部代码详情
@interface ViewController ()
@property (nonatomic, strong) CADisplayLink *displayLink;
@property (nonatomic, assign) NSInteger preSaleEndTime;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(onDisplayLink:)];
// self.displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(onDisplayLinkTime:)];
self.displayLink.preferredFramesPerSecond = 10; // 首选每秒刷新次数,不设置则为屏幕最大刷新率,一般为 60(HZ)
[self.displayLink addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSRunLoopCommonModes];
self.preSaleEndTime = (NSUInteger)([NSDate dateWithTimeIntervalSinceNow:0].timeIntervalSince1970 * 1000) + 3 * 86400 * 1000;
}
- (void)onDisplayLink:(CADisplayLink *)displayLink {
// 当前时间距离 3 日后,倒计时
NSInteger curTime = (NSUInteger)([NSDate dateWithTimeIntervalSinceNow:0].timeIntervalSince1970 * 1000);
if (curTime < self.preSaleEndTime) {
NSUInteger delta = self.preSaleEndTime - curTime;
NSUInteger milliSecond = (delta % 1000)/100;
//天
NSUInteger day = delta/ 1000/ 86400;
//小时
NSUInteger hour = ((delta/ 1000) % 86400)/ 3600;
delta = delta/1000 % 86400;
// 分钟
NSUInteger minute = (delta % 3600)/60;
NSUInteger second = delta % 60;
NSString *dayStr;
if (day > 0) {
dayStr = [NSString stringWithFormat:@"%lu日",day];
} else if (hour > 0) {
dayStr = @"";
}
NSString *hourStr = @"00";
if (hour > 9) {
hourStr = @(hour).stringValue;
} else if (hour > 0) {
hourStr = [@"0" stringByAppendingString:@(hour).stringValue];
}
NSString *minuteStr = @"00";
if (minute > 9) {
minuteStr = @(minute).stringValue;
} else if (minute > 0) {
minuteStr = [@"0" stringByAppendingString:@(minute).stringValue];
}
NSString *secondStr = @"00";
if (second > 9) {
secondStr = @(second).stringValue;
} else if (second > 0) {
secondStr = [@"0" stringByAppendingString:@(second).stringValue];
}
NSString *milliSecondStr = [NSString stringWithFormat:@"%@",@(milliSecond).stringValue];
NSString *text = [NSString stringWithFormat:@"%@ %@:%@:%@.%@", dayStr, hourStr, minuteStr, secondStr,milliSecondStr];
NSLog(@"===>%@",text);
}
}
- (void)onDisplayLinkTime:(CADisplayLink *)displayLink {
// 当前时间
NSInteger curTime = (NSUInteger)([NSDate dateWithTimeIntervalSinceNow:0].timeIntervalSince1970 * 1000);
if (curTime < self.preSaleEndTime) {
NSUInteger delta = curTime;
NSUInteger milliSecond = (delta % 1000)/100;
//小时
NSUInteger hour = (delta/1000/ 3600 + 8) % 24; // 东 8 区,所以 +8
delta = delta/1000 % 86400;
// 分钟
NSUInteger minute = (delta % 3600)/60;
NSUInteger second = delta % 60;
NSString *hourStr = @"00";
if (hour > 9) {
hourStr = @(hour).stringValue;
} else if (hour > 0) {
hourStr = [@"0" stringByAppendingString:@(hour).stringValue];
}
NSString *minuteStr = @"00";
if (minute > 9) {
minuteStr = @(minute).stringValue;
} else if (minute > 0) {
minuteStr = [@"0" stringByAppendingString:@(minute).stringValue];
}
NSString *secondStr = @"00";
if (second > 9) {
secondStr = @(second).stringValue;
} else if (second > 0) {
secondStr = [@"0" stringByAppendingString:@(second).stringValue];
}
NSString *milliSecondStr = [NSString stringWithFormat:@"%@",@(milliSecond).stringValue];
NSString *text = [NSString stringWithFormat:@"%@:%@:%@.%@",hourStr, minuteStr, secondStr,milliSecondStr];
NSLog(@"===>%@",text);
}
}
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!