GCD 定时器操作

var seconds = 10 //倒计时时间
        let queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
        let timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0,queue);
        dispatch_source_set_timer(timer,dispatch_walltime(nil, 0),1 * NSEC_PER_SEC, 0); //每秒执行
        dispatch_source_set_event_handler(timer) {
            if(seconds<=0){ //倒计时结束,关闭
                dispatch_source_cancel(timer);
                dispatch_async(dispatch_get_main_queue(), {
                    //设置界面的按钮显示 根据自己需求设置
                    btn.setTitleColor(UIColor.blackColor(), forState:.Normal)
                    btn.setTitle("获取验证码", forState:.Normal)
                    btn.titleLabel?.font = defaultFont14
                    btn.userInteractionEnabled = true
                    });
            }else{

                dispatch_async(dispatch_get_main_queue(), {
                    UIView.beginAnimations(nil, context: nil)
                    UIView.setAnimationDuration(1)
                })
                dispatch_async(dispatch_get_main_queue(), {
                    //设置界面的按钮显示 根据自己需求设置
                    UIView.beginAnimations(nil, context: nil)
                    UIView.setAnimationDuration(1)
                    btn.setTitleColor(UIColor.orangeColor(), forState:.Normal)
                    btn.setTitle("\(seconds)秒后重新发送", forState:.Normal)
                    btn.titleLabel?.font = UIFont.systemFontOfSize(11)
                    UIView.commitAnimations()
                    btn.userInteractionEnabled = false

                })
               seconds -= 1

        }

    }
    dispatch_resume(timer)

10秒定时器。整理备忘

时间: 2024-10-19 15:59:34

GCD 定时器操作的相关文章

GCD 常用操作

GCD多线程操作 1)用得最多的操作 //获取全局队列 dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); //异步执行 dispatch_async(queue, ^{ //下载图片 dispatch_async(dispatch_get_main_queue(), ^{ //回到主线程更新UI }); }); ? 2)延时执行 1-调用NSObject方法 [Self

IOS GCD定时器

提到定时器,NStimer肯定是我们最为熟悉的. 但是NStimer有着很大的缺点,并不准确. 通俗点说,就是它该做他的事了,但是由于其他事件的影响,Nstimer会放弃他应该做的. 而GCD定时器,是不会发生这种事情的. GCD严格按照规定好的规格去做事. 前面介绍RunLoop 的时候已经介绍了NSTimer. 这里就不在介绍了. 在这里着重介绍一下GCD定时器. 首先,我们知道NStimer是在RunLoop的基础上执行的,然而RunLoop是在GCD基础上实现的,所以说GCD可算是更加高

GCD 延时操作

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ code to be executed after a specified delay }); 这里也存在一些缺点.不能直接取消我们已经提交到dispatch_after的代码,它将会运行.另外一个需要注意的事情就是,在人们使用dispatch_after去

GCD定时器

GCD定时器 by 伍雪颖 + (GCDTimer *)repeatingTimer:(NSTimeInterval)seconds block:(void (^)(void))block { NSParameterAssert(seconds); NSParameterAssert(block); GCDTimer *timer = [[self alloc] init]; timer.block = block; timer.source = dispatch_source_create(D

GCD dispatch_source基本使用,创建GCD定时器与NSTimer的区别

可以使用GCD创建定时器 创建定时器: 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); self.timer = timer; // 定时任务调度设置,4秒后启动,每个5秒运行 dispat

runloop 和 CFRunLoop - 定时器 - NSTimer 和 GCD定时器

1. 2. 1 #import "ViewController.h" 2 3 @interface ViewController () 4 @property (nonatomic, strong) dispatch_source_t timer; 5 @end 6 7 @implementation ViewController 8 9 -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *

ios多线程操作(七)—— GCD延迟操作与一次性代码

使用GCD函数可以进行延时操作,该函数为 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ }); 现在我们来分解一下参数 dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC)) : NSEC_PER_SEC在头文

2017-3-31 操作属性 定时器 操作内容 操作相关元素 元素创建添加删除

(一)操作属性 1.对象.setAttribute('属性名','属性值');  --- 添加属性 例子:把所有class为div的,字体改为30px: var a document.getElementById('div'); for(var i=o;i<a.length;i++){ a[i].setAttribute('style','font-size=30px');或者用a[i].style.fontSize='30px'; } 2.对象.getAttribute('属性名'); - 获

【OC学习-24】实例:创建一个文件并连续写入10次当前时间——巩固文件操作和熟悉定时器操作

(1)创建一个writeData类,在writeData.h里面: #import <Foundation/Foundation.h> @interface writeData : NSObject -(void)runWrite;//定义一个方法供调用,这个方法是创建并打开一个文件,然后利用定时器每个1秒调用另一个私有方法,这私有方法把当前时间到这个文件夹,但只写10次 @end (2)在writeData.m里面具体实现功能: #import "writeData.h"