美文网首页
GCD-倒计时的使用

GCD-倒计时的使用

作者: small_Sea | 来源:发表于2016-11-17 11:33 被阅读0次

GCD 倒计时

#import "UILabel+CountDown.h"
#import <objc/runtime.h>

const char timeKey;
const char titleKey;
const char colorKey;

@implementation UILabel (CountDown)

/**
 倒计时

 @param timeLine 倒计时的时间
 @param title    结束后字符串
 @param subTitle 正在倒计时的字符串
 @param mColor   正在倒计时的颜色
 @param color    倒计时结束的颜色
 */
- (void) startWithTime:(NSInteger)timeLine title:(NSString *)title countDownTitle:(NSString *)subTitle mainColor:(UIColor *)mColor countColor:(UIColor *)color{

// 倒计时时间
__block NSInteger timeOut = timeLine;

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_source_t _timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue);
objc_setAssociatedObject(self, &timeKey, _timer, OBJC_ASSOCIATION_RETAIN);
objc_setAssociatedObject(self, &titleKey, title, OBJC_ASSOCIATION_RETAIN);
objc_setAssociatedObject(self, &colorKey, color, OBJC_ASSOCIATION_RETAIN);

// 每秒执行一次

dispatch_source_set_timer(_timer, dispatch_walltime(NULL, 0), 1.0 * NSEC_PER_SEC, 0);
dispatch_source_set_event_handler(_timer, ^{
   
    if (timeOut <= 0) {
        [self stopTime];
    }else{
        
        int seconds = --timeOut % 60;
        NSString *timeStr = [NSString stringWithFormat:@"%.02d",seconds];
        dispatch_async(dispatch_get_main_queue(), ^{
           
            self.backgroundColor = mColor;
            self.text = [NSString stringWithFormat:@"%@%@",timeStr,subTitle];
            self.userInteractionEnabled = NO;
        });
    }
});
dispatch_resume(_timer);
}

- (void)stopTime{

dispatch_source_t _timer = objc_getAssociatedObject(self, &timeKey);
dispatch_source_cancel(_timer);
dispatch_async(dispatch_get_main_queue(), ^{
    self.backgroundColor = objc_getAssociatedObject(self, &colorKey);
    self.text = objc_getAssociatedObject(self, &titleKey);
    self.userInteractionEnabled = YES;
});
}

使用

- (void)setLabel{

UILabel *countDown = [[UILabel alloc] initWithFrame:CGRectMake(20, 100, 100, 30)];
countDown.font = [UIFont systemFontOfSize:13];
countDown.textAlignment = NSTextAlignmentCenter;
[self.view addSubview:countDown];
self.countDown = countDown;
[self theLabelCountDown];
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(TapDown:)];
[countDown addGestureRecognizer:tap];
}

- (void)TapDown:(UITapGestureRecognizer *)tap{
[self theLabelCountDown];
}

-(void)theLabelCountDown{
[self.countDown startWithTime:60 title:@"重新发送" countDownTitle:@"倒计时" mainColor:[UIColor redColor] countColor:[UIColor yellowColor]];

}

相关文章

  • GCD-倒计时的使用

    GCD 倒计时 使用

  • 7.3 多线程-GCD

    多线程-GCD 多线程-GCD-串行并行 多线程-GCD.png GCD-线程的通讯、延时操作、定时器 GCD-线...

  • 【iOS】 GCD-资源竞争和死锁篇

    GCD-基础篇提出了三个问题,这里我们就这三个问题,在基于GCD-基础篇知识之上给出几种解决方案,仅供参考学习。 ...

  • 【iOS】GCD-简单使用

    本文主在记录GCD的简单使用,更多高级使用请参考文后链接。工具:Xcode GCD使用分为两部分,任务分发和添加到...

  • GCD-信号量的使用

    GCD信号量机制主要涉及到以下三个函数: dispatch_semaphore_create(longvalue)...

  • iOS GCD-信号量的使用

    GCD信号量机制主要涉及到以下三个函数: dispatch_semaphore_create(longvalue)...

  • 小功能:三个倒计时器

    1:直接使用Timer实现倒计时~图一 2:使用Handler实现倒计时的handleMessage()方法,该方...

  • vue3 倒计时编写

    通过使用vue Composition-Api 对倒计时进行封装,让倒计时的使用更加的灵活 1. 编写 count...

  • Android 启动页倒计时自定义view实现

    适用于启动页的几秒倒计时进入主页使用: 使用: 然后代码设置相关属性,开始倒计时: 效果图:

  • Android将倒计时做到极致

    一. 已有倒计时方案存在的问题 在开发倒计时功能时往往我们会为了方便直接使用CountDownTimer或者使用H...

网友评论

      本文标题:GCD-倒计时的使用

      本文链接:https://www.haomeiwen.com/subject/mdedpttx.html