通过屏幕刷新显示实时时间、倒计时

通过屏幕刷新显示实时时间、倒计时

获取屏幕刷新率

@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);
    }
}