iOS UI布局-定时器

定时器是比较常用的一个UI控件,在付款、抢购时,经常会使用到。提取成一个通用的方法

/**
 *  倒计时GCD通用方法
 *  通常用的计时器都是用NSTimer,但是NSTimer在线程很吃紧的时候效果不佳,使用GCD计时相对更好
 *
 *  @param seconds   倒计时间 单位:秒
 *  @param showLable 需要显示的文本框
 *  @param endBlock  倒计时结束后,回调的Block
 */
- (void)startTimerWithSeconds:(long)seconds showLable:(UILabel *)showLable endBlock:(void (^)())endBlock
{
    __block long timeout = seconds; // 倒计时时间
    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(timeout < 0){ // 倒计时结束,回调block
            dispatch_source_cancel(_timer);
            dispatch_async(dispatch_get_main_queue(), ^{
                if (endBlock) {
                    endBlock();
                }
            });
        } else{

            NSString *strTime = [NSString stringWithFormat:@"%02ld分%02ld秒",(long)(timeout % 3600 / 60), (long)(timeout  % 60)];

            // 回到主界面,显示倒计时
            dispatch_async(dispatch_get_main_queue(), ^{
                showLable.text = strTime;
            });

            timeout--;
        }
    });

    dispatch_resume(_timer);
}

调用时就很简单了

[self startTimerWithSeconds:1800 showLable:self.timerLabel endBlock:nil];

效果:

源代码下载:http://pan.baidu.com/s/1mgKrGZA

时间: 2024-11-04 20:01:12

iOS UI布局-定时器的相关文章

iOS UI布局-VFL语言

什么是VFL语言 VFL(Visual Format Language),“可视化格式语言”. VFL是苹果公司为了简化autolayout的编码而推出的抽象语言. 语法说明 H:[cancelButton(72)]-12-[acceptButton(50)] cancelButton宽72,acceptButton宽50,它们之间间距12 H:[wideView(>=60@700)] wideView宽度大于等于60point,该约束条件优先级为700(优先级最大值为1000,优先级越高的约束

iOS UI布局-回到顶部

回到顶部,是比较常用的一个效果 核心代码 在ViewDidLoad中,添加回到顶部按钮 计算偏移量,如果当前显示的内容全部向上隐藏掉,则显示“回到顶部”按钮 // // ViewController.m // 回到顶部 // // Created by Apple on 15/11/4. // Copyright © 2015年 Apple. All rights reserved. // #import "ViewController.h" @interface ViewContro

iOS 8 UI布局 AutoLayout及SizeClass(二)

一.新特性Size Class介绍 随着iOS8系统的发布,一个全新的页面UI布局概念出现,这个新特性将颠覆包括iOS7及之前版本的UI布局方式,这个新特性就是Size Class.Size Class配合Auto Layout可以解决所有(包括iPhone及iPad)iOS设备屏幕尺寸及屏幕旋转时候的UI适配问题 . 二.为什么要使用Size Class 直到iPhone6发布后,目前iOS设备的屏幕尺寸已经有4种了,如图: iPhone6没出现之前,还可以通过代码来适配两种尺寸的UI,但iP

iOS界面布局的核心以及TangramKit介绍

前言 TangramKit是iOS系统下用Swift编写的第三方界面布局框架.他集成了iOS的AutoLayout和SizeClass以及Android的五大容器布局体系以及HTML/CSS中的float和flex-box的布局功能和思想,目的是为iOS开发人员提供一套功能强大.多屏幕灵活适配.简单易用的UI布局解决方案.Tangram的中文即七巧板的意思,取名的寓意表明这个布局库可以非常灵巧和简单的解决各种复杂界面布局问题.他的同胞框架:MyLayout是一套用objective-C实现的界面

React-Native入门指南(三) ——CSS和UI布局

React-Native入门指南 github:https://github.com/vczero/react-native-lession React-Native:用JavaScript开发你的原生应用,释放Native的UI体验,体验 Hybird开发效率. 最近一个星期写的文章如下: 第1篇hello react-native 第2篇认识代码结构 第3篇css和布局 第4篇学会react-native布局 第5篇ui组件 还有几篇需要这这周完成(这块会时刻更新): 第6篇JSX语法 第7

iOS-屏幕适配-UI布局

iOS 屏幕适配:autoResizing autoLayout和sizeClass 一.图片解说 -------------------------------------------------------------------------------------------------------------------------------------------------------------- 二.AutoLayout 1.前言 •在iOS程序中,大部分视图控制器都包含了大量

iOS8开发~UI布局(二)storyboard中autolayout和size class的使用详解

一.概要:前一篇初步的描述了size class的概念,那么实际中如何使用呢,下面两个问题是我们一定会遇到的: 1.Xcode6中增加了size class,在storyboard中如何使用? 2.auto layout该如何与size class配合来进行UI布局? 二.了解一件新事物的最好的办法就是实践,让我们揭开那神秘的面纱: 例子1.新建一个Single View Application template项目Demo1,拖拽一个newView到rootView上,并设置背景色为绿色, 然

iOS8开发~UI布局(一)初探Size Class

一.新特性Size Class介绍 随着iOS8系统的发布,一个全新的页面UI布局概念出现,这个新特性将颠覆包括iOS7及之前版本的UI布局方式,这个新特性就是Size Class.Size Class配合Auto Layout可以解决所有(包括iPhone及iPad)iOS设备屏幕尺寸及屏幕旋转时候的UI适配问题 . 二.为什么要使用Size Class 直到iPhone6发布后,目前iOS设备的屏幕尺寸已经有4种了,如图: iPhone6没出现之前,还可以通过代码来适配两种尺寸的UI,但iP

iOS UI Tab开发

iOS UI Tab开发(iOS 8) tab这种样式,类似于单选,可以叫radio-style,这是一个现在主流的layout-design,它让APP内容结构清晰,开发分工逻辑明确,经典的就是微信,时钟等 综述一下: 1.UITabBarController继承UIViewController,是一个ViewController container 2.UITabBarController拥有一个(readonly)的TabBar,TabBar拥有一到多个TabBarItem 3.每一个It