• 倒计时按钮,根据时间单位转化


    //
    //  CountdownButton.h
    //  Standardization
    //
    //  Created by YuFly on 2017/10/16.
    //  Copyright © 2017年 strong. All rights reserved.
    //
    
    #import <UIKit/UIKit.h>
    @class CountdownButton;
    
    typedef void(^Completion)(CountdownButton *countdownButton);
    @interface CountdownButton : UIButton
    
    /**
     倒计时
    
     @param startTime  倒计时时间
     @param timeUnit   时间单位
     @param completion 结束回调
     */
    - (void)countDownButtonWithStartTime:(NSInteger)startTime
                               timeUnit:(NSString *)timeUnit
                                endTitle:(NSString *)endTitle
                              completion:(Completion)completion;
    @end
    //
    //  CountdownButton.m
    //  Standardization
    //
    //  Created by YuFly on 2017/10/16.
    //  Copyright © 2017年 strong. All rights reserved.
    //
    
    #import "CountdownButton.h"
    
    @implementation CountdownButton
    
    - (void)countDownButtonWithStartTime:(NSInteger)startTime
                                timeUnit:(NSString *)timeUnit
                                endTitle:(NSString *)endTitle
                              completion:(Completion)completion{
        __unsafe_unretained CountdownButton *ws=self;
        NSInteger beginTime = startTime;
        if([[timeUnit lowercaseString] isEqualToString:@"s"])
            beginTime = startTime;
        else if([[timeUnit lowercaseString] isEqualToString:@"min"])
            beginTime = startTime*60;
        else if([[timeUnit lowercaseString] isEqualToString:@"h"])
            beginTime = startTime*60*60;
        __block NSInteger remainTime = beginTime;
        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_TIME_NOW, 1.0 * NSEC_PER_SEC, 0 * NSEC_PER_SEC);
        dispatch_source_set_event_handler(timer, ^{
            if (remainTime <= 0) { // 倒计时结束
                dispatch_source_cancel(timer);
                dispatch_async(dispatch_get_main_queue(), ^{
                     [ws setTitle:[NSString stringWithFormat:@"%@",endTitle] forState:UIControlStateDisabled];
                    ws.enabled = YES;
                    completion(ws);
                });
            } else {
                NSString *timeStr = [ws getMMSSFromSS:[NSString stringWithFormat:@"%ld", remainTime] timeUnit:timeUnit];
                dispatch_async(dispatch_get_main_queue(), ^{
                    [ws setTitle:[NSString stringWithFormat:@"允许%@倒计时%@",endTitle,timeStr] forState:UIControlStateDisabled];
                    ws.enabled = NO;
                });
                remainTime--;
            }
        });
        dispatch_resume(timer);
    }
    
    
    -(NSString *)getMMSSFromSS:(NSString *)timeString timeUnit:(NSString *)timeUnit{
        
        NSInteger seconds = [timeString integerValue];
        NSString *hour = [NSString stringWithFormat:@"%02ld",seconds/3600];
        NSString *minute = [NSString stringWithFormat:@"%02ld",(seconds%3600)/60];
        NSString *second = [NSString stringWithFormat:@"%02ld",seconds%60];
        NSString *format_time = [NSString stringWithFormat:@"%@:%@:%@",hour,minute,second];
        
        if([[timeUnit lowercaseString] isEqualToString:@"s"])
        {
            format_time= timeUnit;
        }
        else if([[timeUnit lowercaseString] isEqualToString:@"min"])
        {
            format_time = [NSString stringWithFormat:@"%@:%@",minute,second];
        }
        return format_time;
    }
    
    @end
  • 相关阅读:
    电容充放电时间计算
    常见AVX贴片钽电容封装尺寸、容值、耐压值的关系
    EPCS1结构及访问注意事项
    拜占庭将军问题
    photoshop的蒙板的作用
    linux系统脚本的常见启动顺序
    进制转换
    8>ORACLE四种关闭方式
    32位和64位操作系统的区别
    javascript 对大小写的问题
  • 原文地址:https://www.cnblogs.com/YuFly-lyx/p/7681312.html
Copyright © 2020-2023  润新知