ios NSTimer做的计时器(精确到微妙)

iOS开发:NSTimer,计时器的使用        在开发过程中,计时器的使用也是比较普遍的,在苹果自带的Foundation框架中有一个计时器专用的类NSTimer,NSTimer的使用也很简单,比如使用计时器来做手机验证码的倒计时操作,轮播图的定时,也可以指定执行任何任务的延迟时间间隔,还可以循环重复运行任务,以及指定绝对的时间和日期等功能,NSTimer可以精确到50-100毫秒,所以说计时器的准确性还是可以的,本节就来讲讲NS... 阅读详情

自己在学习过程中用到过NSTimer,当时在网上找了不少资料。现在自己做一个简单的demo跟大家分享。

我就直接在下面粘贴代码,希望能帮到一些初学iOS的朋友。

ViewController.h:

#import <UIKit/UIKit.h>


@interface ViewController : UIViewController{

    UIButton *startButton;

    UIButton *stopButton;

    UILabel *timeLabel;

    UILabel *detailLabel;

    NSTimer *mytimer;

}


@property (nonatomic) BOOL isOn;

@property (nonatomic) int myTimerecord,hour,min,scd,mscd;

@property (nonatomic) NSString *hourText,*minText,*scdText,*mscdText,*timeLabelText;



@end


ViewController.m:

#import "ViewController.h"


@interface ViewController ()


@end


@implementation ViewController

_hour = 0;

_min = 0;

_scd = 0;

_mscd = 0;

_myTimerecord = 0;


- (void)viewDidLoad {

    [super viewDidLoad];

    

    detailLabel = [[UILabel alloc]initWithFrame:CGRectMake(60, 30, 200, 70)];

    detailLabel.text = @"计时器";

    [detailLabel setTextAlignment:NSTextAlignmentCenter];

    [self.view addSubview:detailLabel];

    

    startButton = [[UIButton alloc]initWithFrame:CGRectMake(60, 320, 60, 40)];

    [startButton setBackgroundColor:[UIColor blueColor]];

    [startButton setTitle:@"开始" forState:UIControlStateNormal];

    [startButton addTarget:self action:@selector(startBtAction) forControlEvents:UIControlEventTouchUpInside];

    [self.view addSubview:startButton];

    

    stopButton = [[UIButton alloc]initWithFrame:CGRectMake(200, 320, 60, 40)];

    [stopButton setBackgroundColor:[UIColor blackColor]];

    [stopButton setTitle:@"停止" forState:UIControlStateNormal];

    [stopButton addTarget:self action:@selector(stopBtAction) forControlEvents:UIControlEventTouchUpInside];

    [self.view addSubview:stopButton];

    

    timeLabel = [[UILabel alloc]initWithFrame:CGRectMake(0, 100, 320, 120)];

    [timeLabel setTextAlignment:NSTextAlignmentCenter];

    [timeLabel setText:@"00  :  00  :  00  :  00"];

    timeLabel.font = [UIFont boldSystemFontOfSize:32.0];

    [timeLabel setBackgroundColor:[UIColor blackColor]];

    [timeLabel setTextColor:[UIColor whiteColor]];

    [self.view addSubview:timeLabel];

    

    //这里0.01表示设置时间间隔是0.01秒

    mytimer = [NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:@selector(timerFired) userInfo:nil repeats:YES];

    // Do any additional setup after loading the view.

}


//根据上面的设定,这个方法每隔0.01秒执行一次

-(void)timerFired

{

    if (_isOn) {

        _myTimerecord++;                      //记录累计微妙的值,根据这个值计算出相对应的秒,分钟,小时

        _hour = _myTimerecord / 360000;

        _min = (_myTimerecord%360000)/6000;

        _scd = (_myTimerecord%6000)/100;

        _mscd = _myTimerecord%100;

    }

    [self updateUI];

}


-(void)startBtAction

{

    if (_isOn) {

        _isOn = NO;

    } else {

        _isOn = YES;

    }

}


-(void)stopBtAction

{

    _isOn = NO;//暂停

    [self realStop];

}


-(void)realStop

{

    _hour = 0;

    _min = 0;

    _scd = 0;

    _mscd = 0;

    _myTimerecord = 0;

    _isOn = NO;

}


//这个方法实现数据(_myTimerecord)和页面中显示的值是统一的

-(void)updateUI

{

    if (_hour < 10) {

        _hourText = [[NSString alloc]initWithFormat:@"0%d",_hour];

    }else {

        _hourText = [[NSString alloc]initWithFormat:@"%d",_hour];

    }

    

    if (_min < 10) {

        _minText = [[NSString alloc]initWithFormat:@"0%d",_min];

    }else {

        _minText = [[NSString alloc]initWithFormat:@"%d",_min];

    }

    

    if (_scd < 10) {

        _scdText = [[NSString alloc]initWithFormat:@"0%d",_scd];

    }else {

        _scdText = [[NSString alloc]initWithFormat:@"%d",_scd];

    }

    

    if (_mscd < 10) {

        _mscdText = [[NSString alloc]initWithFormat:@"0%d",_mscd];

    } else {

        _mscdText = [[NSString alloc]initWithFormat:@"%d",_mscd];

    }

    

    _timeLabelText = [[NSString alloc]initWithFormat:@"%@  :  %@  :  %@  :  %@",_hourText,_minText,_scdText,_mscdText];

    [timeLabel setText:_timeLabelText];

    

    if (_isOn) {

        [startButton setTitle:@"暂停" forState:UIControlStateNormal];

    }else {

        [startButton setTitle:@"开始" forState:UIControlStateNormal];

    }

}


@end



iOS计时器(OC版) 本demo用OC编写,包含计时设定,开始计时,取消计时,暂停计时,继续计时,结束音乐提示.代码一般,提供仅供参考 立即下载

相关推荐

ios-计时器.zip

一个倒计时的demo

iOS_定时器:NSTimer、GCDTimer、DisplayLink

在iOS里用个Timer(定时器)真的是太麻烦了,一不小心就不work了,一不小心又导致内存泄露了~ 反正就是得非常注意,下面就来聊聊计时器: Timer工作原理 首先我们得了解Timer是怎么工作的: 首先它需要加到RunLoop中,RunLoop会在固定时间触发Timer的回调。这个Timer是被存放在RunLoop的Model的_timers数组里,是强引用的。(之前的文章有介绍RunLoop的结构) 因此我们需要在持有Timer的对象(如:ViewController,本文就以ViewControl

mikimo的博客 4079

ios-精确到毫秒的倒计时.zip

电商类App精确到毫秒的商品抢购时间倒计时,当时看了许多的计时器demo,都无法实现项目的需求。最后自己摸索的写了一个小demo。让大家参考,有什么意见可以发邮件给我13909342203@139.com 最后附上源码地址:https://github.com/DemonLover/NS_Timer.git

iOS NStimer计时器的使用

repeats 是否循环重复执行,属性有NO/YES;NO就只执行一次,YES的话就每隔1秒执行一次。scheduledTimerWithTimeInterval 设置多长时间执行一次,这里是一秒。selector 需要调用的方法,timerClick是这里调用的方法。将定时器的资源释放掉,定时器所执行的方法体则都全部停止执行完毕.userInfo 可以传需要的值。target 添加到的对象。

weixin_45958328的博客 861

全屏计时器

可调节时间,可以倒计时,也可以正计时,可全屏模式和窗口模式,很好用的

【过检测】2026调试级去虚拟化虚拟机成品

EternalBlaze调试级虚拟机是由恒烈开发的定制化VMware环境,适用于逆向工程、病毒分析等专业场景。该虚拟机基于Windows 10 1909专业版,预装Python/JDK等开发环境和逆向工具包,支持快照回溯功能。特色包括:一键去虚拟化方案、双机调试支持、驱动开发环境等。适用场景涵盖CTF竞赛、软件调试、病毒行为分析等,但不支持DX12游戏和视频盗录。使用前需按步骤关闭安全中心、安装特定VMware版本并执行去虚拟化操作。虚拟机提供基础版和逆向调试增强版两种配置,均预装必要工具链。(149字)

Heng_lie的博客 2664

iOS:三种常见计时器(NSTimer、CADisplayLink、dispatch_source_t)的使用

一、介绍 在iOS中,计时器是比较常用的,用于统计累加数据或者倒计时等,例如手机号获取验证码。计时器大概有那么三种,分别是:NSTimer、CADisplayLink、dispatch_source_t 二、使用 @property (strong,nonatomic)NSTimer *timer; @property (strong,nonatomic)CADispl...

dienangpiao2051的博客 668

Win7运行豆包桌面版的兼容性原理与实操方案

Windows 7作为已停止主流支持的操作系统,其与现代Electron应用的兼容性问题本质是API层面的系统调用断层。Electron 28+依赖的GetSystemTimePreciseAsFileTime、SetThreadDescription等Windows 10专属API,在Win7 SP1中天然缺失,导致‘无法定位程序输入点’等典型错误。解决路径并非简单打补丁,而是需理解底层ABI差异、补丁堆叠边界及动态API转发机制。关键技术价值在于通过兼容层(如VxKex NEXT)或运行时降级(Elec

weixin_33290540的博客 1333

iOS/OS X中的高精确度定时器

原文地址:https://developer.apple.com/library/content/technotes/tn2169/_index.html iOS/OS X中的高精确度定时器 。。。 Timer工作原理 iOS和OS X中有很多API允许等待特定的一段时间。这些API可能是C或者Objective C写成的,他们有不同类型的参数,但是它们在内核中都以

阿党的专栏 2912

Feko仿真GPS微带天线学习笔记

为了优化方便,使参数变量化,所以定义几个变量在CADFEKO左侧浏览器中如图所示定义变量,如下表贴片的尺寸切角尺寸feed =-6.4馈电点距坐标原点的距离sub_w=45基板的宽度sub_d=45基板的长度sub_h=5基板的高度epsR=5.6介电常数损耗角正切。

qq_36521926的博客 3989

DaVinci Developer中枚举类型变量的创建与实战应用

本文详细介绍了在DaVinci Developer中创建和使用枚举类型变量的方法与实战应用。通过智能温控系统的案例,阐述了枚举类型在嵌入式开发中的核心价值,包括提升代码可读性、类型安全性和维护便捷性。文章还提供了枚举类型在状态机实现和多模块协同中的高级应用技巧,以及调试与优化的实用建议。

ik678901234的博客 511

IOS之秒表计时器

1.利用xib方式新建一个秒表计数器。 功能实现: 该应用有三个按钮:开始,记次,复位 开始:开始控制着秒表的开始,点击后,按钮文字变成停止,在没有开始的情况下不允许记次操作 记次:可以记录多个你点击的时间, 复位:复位可以让秒表归零 实现效果图如下:

code changes world! 1万+

Temporal Fusion Transformer(TFT)与扩散模型融合:时间序列预测新范式

本文探讨了Temporal Fusion Transformer(TFT)与扩散模型融合的时间序列预测新范式。该融合方案利用TFT强大的特征提取与可解释性,为扩散模型提供精准的“导航图”,从而在噪声数据中实现鲁棒预测,并原生支持不确定性量化,输出完整的概率分布与置信区间,为金融、能源等领域的风险决策提供更可靠的依据。

weixin_29096377的博客 289

NSTimer定时器的使用

前言:这是关于NSTimer的学习笔记。 正文内容大纲: 1、关于计时器NSTimer的一个被添加进NSRunLoop的使用细节 2、关于NSTimer常用方法的使用 3、关于NSTimer的类别工具类 正文: 1、关于计时器NSTimer的一个被添加进NSRunLoop的使用细节 下面展示一个示例: 在NSTimer scheduledTim...

weixin_34194087的博客 117

LC整流滤波电路DIY:电感电容配合,手把手搭建低纹波直流电源

在直流电源设计中,整流滤波是连接交流输入与稳定输出的关键环节。常见的电容滤波虽然简单,但在大负载下纹波抑制能力有限,电感抵抗电流突变、电容抵抗电压突变,二者组合构成的LC滤波能有效降低输出电压纹波,同时减小开机浪涌电流。在工频线性电源、功放电源等对噪声敏感的场景中,LC滤波常作为稳压前的平滑缓冲。本文以一套完整DIY项目为线索,介绍整流桥后串联功率电感、并联滤波电容的电路构成,结合实际计算与波形测试,讨论电感量估算、电容选取、谐振风险、饱和电流等工程问题,并给出上电测试和故障排查方法。通过搭建与调试,可直观

weixin_29168813的博客 376

WIN10系统下VS2019编译CloudCompare2.12.4

CloudCompare2.12.4

点云侠的博客 3142

一个简单的定时器(NSTimer)的封装

在项目开发中我们有的时候需要用到计时器,比如登录超时,scrollview的滚动等,那么就让我们自己手动的去创建一个类库吧。 1 首先你需要一个向外提供创建的便捷方法。 1.1 这里考虑两种情况,一种是我创建了定时器马上就要开启,另一种情况 则是我不想马上开始。 1.3 然后你需要知道多久运行一次, 1.4 多久向外面发送一次消息。 1.5 还有尽量的去达到一个低耦合高内聚的这么一个思想,...

weixin_30647065的博客 232

QT应用编程: 基于UDP协议设计的大文件传输软件

一、环境介绍 QT版本: 5.12.6 编译器: MinGW 32 传输协议: UDP 功能介绍:软件由客户端和服务器组成,客户端通过 UDP协议不断循环地向服务端发送文件,文件传输速率可以达到10MB/s以上,文件传输后支持自动删除,客户端上可以支持每分钟创建一个文件并以时间戳命名,每个生成的文件可以设置大小,默认大小为6GB; 服务端收到文件之后,将文件进行存储到本地,可以指定时间自动删除文件;服务端可以动态计算传输速率,并写入日志文件; 服务器可以支持同时接收多个客户端的文件上传。...

2803

iOS小技巧 - 利用GCD创建更加准确的定时器

NSTimer创建的定时器不是很准确,我们可以用GCD来创建一个准确的定时器 顺便提示一点:GCD不受RunLoop的影响(比如:scrollView在拖动的时候,定时器照样执行) @interface ViewController () /** * 定时器(这里不用带*,因为dispatch_source_t就是个类,内部已经包含了*) */ @property(nonat

LinXunFeng的博客 1748

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

NSTimer精准度及影响因素分析

项目中经常会遇到需要定时循环执行某些方法的场景,例如发送短信倒计时需求,此时NSTimer就派上用场了,关于NSTimer的用法在此就不做多的解释,这里要讨论的是NSTimer真的可以准确完成定时触发的功能吗? 一、NSTimer是否是精准的? 首先我们先看一下苹果官方对于NSTimer的定义: Timers work in conjunction with run loops. Run loop...

TuGeLe的博客 1061

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

iOS-计时器

在iOS开发中定时器的实现有三种方式:NSTimer、CADisplayLink、GCDGCD://GCD -(void)GCDMethod{ timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, dispatch_get_main_queue()); //每2秒执行一次,误差在1秒以内 dispat

极客学伟的技术分享社区 2073

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

IOS之计时器

调用一次计时器方法: [cpp] view plaincopy myTimer = [NSTimer scheduledTimerWithTimeInterval:1.5 target:self selector:@selector(scrollTimer) userInfo:nil repeats:NO];   //不重复,只调用一次。tim

liric的专栏 836

Html5 倒计时/正计时 功能完成(一)

首先是插件代码,是参考了网上别人的倒计时项目(jQuery-Final-Countdown)。额外添加了 正计时,定时提醒,暂停,继续,开始,停止,以及计次的功能,并且将原来的精确到秒改成精确到毫秒,花了我整整一天完成。 如下是插件的核心逻辑: /*! * jQuery Final Countdown * * @author Pragmatic Mates, http://pragmat

江上一条鱼的博客 5229

IOS中定时器NSTimer的开启与关闭

调用一次计时器方法: myTimer = [NSTimer scheduledTimerWithTimeInterval:1.5 target:self selector:@selector(scrollTimer) userInfo:nil repeats:NO]; //不重复,只调用一次。timer运行一次就会自动停止运行 重复调用计时器方法: timer = [NSTim

集结号 18万+

「iOS」你会用几种方法实现计时器

1.NSTimer 存在一定的误差,不管是一次性的还是周期性的timer得实际触发事件的时间,都会与所加入的runloop和runloopMode有关,如果此runloop正在执行一个连续性的运算,timer就会被延时触发。 // 创建方式1 NSTimer *timer1 = [NSTimer scheduledTimerWithTimeInterval:1.0 target:...

u010417491的博客 1322

iOS 多语言本地化教程,VS Code KXApp 编辑 String Catalog .xcstrings

做 iOS 多语言本地化总要在 VS Code 和 Xcode 之间来回切?这篇讲用 KXApp(快蝎)在 VS Code 里直接编辑 String Catalog(.xcstrings):双击打开和 Xcode 一样的表格,`.xcstrings` 与老的 `.strings`、`.stringsdict` 同表编辑,加语言同步登记到工程、从源码扫描同步新 key,复数、设备变体和变量占位都在表里处理,改源语言文本后已有翻译自动标需复核。文件仍是标准格式,回 Xcode 打开一致。

2501_91592143的博客 164
github_32516161
博客等级 码龄11年 0粉丝 1原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值