`

[ios]按钮倒计时

    博客分类:
  • IOS
阅读更多

1.Android下方法:

使用 CountDownTimer Class

new CountDownTimer(getResources().getInteger(R.integer.change_count_max_value) * 1000, 1000) {

                public void onTick(long millisUntilFinished) {
                    valueCode.setText("" + (int)(millisUntilFinished/1000));
                }

                public void onFinish() {
                    //timeOutFlag = true;
                    valueCode.setText(R.string.get_code);

                    changeButton.setEnabled(true);
                }
            }.start();
        }
    }
});

 

2.IOS下:

思路:

  • 创建按钮, 添加点击方法;
  • 用NSTimer定时器, 每秒执行一次, 定时改变Button的title,改变Button的样式, 设置Button不可点击;
  • 若倒计时结束, 定时器关闭, 并改变Button的样式, 可以点击;

在按钮的点击事件里调用该方法:

-(void)openCountDonw{
     __block NSInteger time = 59;
    
    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);
    
    dispatch_source_set_timer(_timer,dispatch_walltime(NULL, 0),1.0*NSEC_PER_SEC, 0); //每秒执行
    
    dispatch_source_set_event_handler(_timer, ^{
        
        if(time <= 0){ //倒计时结束,关闭
            
            dispatch_source_cancel(_timer);
            dispatch_async(dispatch_get_main_queue(), ^{
                
                //设置按钮的样式
                [_getCode setTitle:NSLocalizedString(@"get_code", @"") forState:UIControlStateNormal];
                _getCode.userInteractionEnabled = YES;
            });
            
        }else{
            
            int seconds = time % 60;
            dispatch_async(dispatch_get_main_queue(), ^{
                
                //设置按钮显示读秒效果
                [_getCode setTitle:[NSString stringWithFormat:@"%.2d", seconds] forState:UIControlStateNormal];
                [_getCode setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
                _getCode.userInteractionEnabled = NO;
            });
            time--;
        }
    });
    dispatch_resume(_timer);
}

 

注意点:

 

我们在创建Button时, 要设置Button的样式:
当type为: UIButtonTypeCustom时 , 是读秒的效果.
当type为: 其他时, 是一闪一闪的效果.

 

概念:

1.__block:Block内部能够读取外部局部变量的值。但我们需要改变这个变量的值时,我们需要给它附加上__block修饰符。上述NSInteger time 变量在Block外部定义,在Block内使用了time--;

2. userInteractionEnabled:当前视图设为view.userInteractionEnabled=NO 时,当前视图不可交互,该视图上面的子视图也不可与用户交互(不可响应即被该视图忽视),响应事件传递到下面的父视图。此时其他按钮都不能点击。

3.dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); //获得程序进程缺省产生的并发队列,可设定优先级来选择高、中、低三个优先级队列。由于是系统默认生成的,所以无法调用dispatch_resume()和dispatch_suspend()来控制执行继续或中断。需要注意的是,三个队列不代表三个线程,可能会有更多的线程。并发队列可以根据实际情况来自动产生合理的线程数,也可理解为dispatch队列实现了一个线程池的管理,对于程序逻辑是透明的。

4.dispatch_source_t:精度比NSTimer高的计时器,系统自动触发,系统级别的源。

5.dispatch_resume():恢复队列 dispatch_source_cancel:取消队列

 

6.dispatch_async(queue,block)  async 异步队列,dispatch_async 函数会立即返回, block会在后台异步执行

 

参考:

1.iOS 短信验证码倒计时按钮的实现:http://www.cnblogs.com/leixu/articles/5457580.html

2. userInteractionEnabled : http://www.jianshu.com/p/febef5ce9adc

3.GCD基础知识集合:http://www.jianshu.com/p/1f48eb97922b

4.计时器:http://www.jianshu.com/p/faa6ffe4fac3

分享到:
评论

相关推荐

    ios-倒计时按钮.zip

    在iOS开发中,倒计时按钮是一个常见的交互元素,它通常用于表示某个操作在特定时间后将变为可用或过期。本项目“ios-倒计时按钮.zip”包含了一个名为EBCountDownButton的自定义控件,它允许开发者在按钮上实现动态的...

    iOS 倒计时按钮

    在iOS开发中,倒计时按钮(Countdown Button)是一种常见的UI组件,它在特定场景下,如发送验证码、开启限时活动等,有着广泛的应用。本文将深入探讨如何实现一个功能完善的iOS倒计时按钮,并结合提供的代码示例`...

    ios-倒计时按钮,回调,方法.zip

    在iOS开发中,倒计时按钮是一种常见的交互元素,它能够提供一种动态的用户体验,比如在用户进行某些操作前设置时间限制。这个压缩包“ios-倒计时按钮,回调,方法.zip”显然包含了实现这一功能的相关代码示例。下面...

    撸大湿iOS倒计时按钮SDK(在后台或切换页面依然倒计时)(优化版)

    (优化版)由于苹果官方对iOS系统后台任务管控非常严格,所以在iOS系统要实现倒计时进入后台或者切换页面之后依然能保持倒计时状态会比较繁琐或困难,但倒计时按钮是经常用到、司空见惯!经常看到不太友好的倒计时按钮...

    撸大湿iOS倒计时按钮SDK(在后台或切换页面依然倒计时)

    由于苹果官方对iOS系统后台任务管控非常严格,所以在iOS系统要实现倒计时进入后台或者切换页面之后依然能保持倒计时状态会比较繁琐或困难,但倒计时按钮是经常用到、司空见惯!经常看到不太友好的倒计时按钮表现为,...

    iOS中动态密码(倒计时按钮)按钮Block封装,选取器(UIPickerView)的Block封装,日期选取器(UIDatePicker)的Block封装

    在封装过程中,我们可以定义一个包含倒计时时间、结束回调Block的属性,然后在按钮点击事件中启动定时器,每次更新按钮上的文字,直到倒计时结束并调用Block。 2. **UIPickerView封装** UIPickerView是iOS中一个...

    ios-tableView定义倒计时显示.zip

    这个压缩包"ios-tableView定义倒计时显示.zip"包含了一个示例项目,它演示了如何在UITableView的单元格(cell)中添加倒计时功能。在这个教程中,开发者提供了一个基本的倒计时实现,但未涵盖获取毫秒级时间的方法。...

    ios-发送验证码倒计时按钮.zip

    在iOS开发中,"ios-发送验证码倒计时按钮.zip" 这个资源包主要涉及的是用户验证过程中常见的功能:发送验证码并实现倒计时功能。这个功能在注册、找回密码等场景中非常常见,目的是确保用户能及时接收到验证码,并在...

    ios-按钮倒计时.zip

    在iOS开发中,按钮(UIButton)倒计时功能是一个常见的需求,例如在用户发送短信验证码后,为了防止频繁发送,通常会设置一个等待时间,在这段时间内按钮会被禁用并显示剩余时间,直到倒计时结束才能再次触发按钮...

    点击实现倒计时,按钮变成不可点击,倒计时结束,按钮重新可点击

    在Android或iOS原生开发中,倒计时功能可以通过系统提供的定时器(如Java的`CountDownTimer`或Swift的`DispatchSourceTimer`)实现,同时需要更新界面UI来反映倒计时的变化。 如果涉及到服务器端的倒计时,比如在...

    swift-好用的iOS倒计时按钮

    今天我们将聚焦于一个特定的UI控件——"swift-好用的iOS倒计时按钮",它在处理诸如注册、验证码获取等场景时特别有用。在这些场景中,用户点击按钮后,按钮会进入倒计时状态,防止用户频繁发送请求。 倒计时按钮的...

    swift-DFCountDownButton继承UIButton实现IOS倒计时按钮

    4. **倒计时结束**: 倒计时结束后,按钮的文字会恢复为原始状态,同时可点击状态也会恢复,允许用户再次触发倒计时。 在实际项目中,DFCountDownButton的使用非常简单。只需要在代码中导入库,然后像创建普通...

    IOS集成倒计时器

    IOS 验证码按钮倒计时集成 调用只需传入需要变成倒计时的按钮,然后设定自己需要的参数,例如倒计时时间,按钮文字,颜色等信息即可直接使用,不需要在自己去些麻烦的倒计时方法 注:最后一定运行取消时一定要调用...

    按钮倒计时

    "按钮倒计时"是iOS应用中常见的一种交互设计,尤其在需要用户等待一段时间才能执行特定操作的场景下,如60秒内输入验证码。这种功能可以有效防止误操作,同时给用户提供明确的等待指示。 封装按钮的倒计时功能通常...

    iOS启动页倒计时跳过按钮功能

    iOS 启动页倒计时跳过按钮功能是指在 iOS 应用程序启动时,出现的倒计时跳过按钮,用于提供给用户一个倒计时关闭启动页面的功能。本文将详细介绍 iOS 启动页倒计时跳过按钮功能的实现方法和相关技术细节。 一、实现...

    iOS 倒计时按钮 JKCountDownButton.zip

    iOS 倒计时按钮 JKCountDownButton ,JKCountDownButton,子类化UIButton实现IOS倒计时按钮,常常用于注册等发送验...

    ios-倒计时.zip

    在iOS开发中,倒计时是一项常见的功能,例如在用户点击“获取验证码”后开始一个60秒的倒计时,防止频繁发送验证码。在这个场景中,开发者通常会使用`NSTimer`来实现这一功能。下面我们将深入探讨如何使用`NSTimer`...

Global site tag (gtag.js) - Google Analytics