栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

快速计时器(以毫秒为单位)

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

快速计时器(以毫秒为单位)

正如Martin在评论中所说,计时器的分辨率为50-100毫秒(0.05至0.1秒)。尝试以短于该间隔的时间运行计时器将无法获得可靠的结果。另外,计时器不是实时的。它们取决于它们所附加的运行循环,并且如果运行循环变得繁忙,则计时器的启动会延迟。

不要在每次触发计时器时尝试增加计数器,而是在启动计时器时记录开始时间,然后做一些数学运算以弄清楚发生了多少时间:

var startTime: NSTimeInterval//Sart the timerstartTime = NSDate.timeIntervalSinceReferenceDate()NSTimer.scheduledTimerWithTimeInterval(0.02,   target: self,   selector: Selector("advanceTimer:"),   userInfo: nil,  repeats: true)//And your  timer method...func advanceTimer(timer: NSTimer){  //Total time since timer started, in seconds  self.time = NSDate.timeIntervalSinceReferenceDate() - startTime  //The rest of your pre goes here }

编辑:

此代码的Swift 3版本如下所示:

(写为测试项目中的视图控制器)

class ViewController: UIViewController {  weak var timer: Timer?  var startTime: Double = 0  var time: Double = 0  @IBOutlet weak var timevalueLabel: UILabel!    override func viewDidAppear(_ animated: Bool) {    startTime = Date().timeIntervalSinceReferenceDate    timer = Timer.scheduledTimer(timeInterval: 0.05,target: self,selector: #selector(advanceTimer(timer:)),userInfo: nil,repeats: true)  }  //When the view controller is about to disappear, invalidate the timer  override func viewWillDisappear(_ animated: Bool) {    timer?.invalidate()  }  func advanceTimer(timer: Timer) {    //Total time since timer started, in seconds    time = Date().timeIntervalSinceReferenceDate - startTime    //The rest of your pre goes here    //Convert the time to a string with 2 decimal places    let timeString = String(format: "%.2f", time)    //Display the time string to a label in our view controller    timevalueLabel.text = timeString  }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/403862.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号