Swift 3中的倒数计时器

独立编程(阅读:在家)可能具有挑战性(阅读:由于Netflix),所以当我在Uber的《纽约女性密码》活动中听到Susan LoVaglio的闪电演讲中的Pomodoro技术时,我立即被卖掉了。 简而言之,Pomodoro技术是一种生产率方法,您可以在25分钟的间隔内完成一个目标,在此间隔5分钟。 对于像我这样管理博客,工作搜索和构建自己的应用程序的人来说,这似乎是实现自己的每个目标的好方法。

为了创建一个倒数计数器,我创建了一个Timer对象的实例。

在情节提要上,我创建了一个工具栏,并向其中添加了3个按钮按钮项:播放,暂停和重置。

在第20行上,您将看到一个布尔属性,用于标识计时器何时开启。

  var timerIsOn = false 

然后,我为每个工具栏按钮创建了IBActions函数:“重置”-> resetTapped,“暂停”-> pauseBtnTapped,“播放”-> playBnTapped。

对于我的playBtnTapped函数,请执行以下操作:

  1. 显示以前隐藏的进度条
  2. 如果计时器当前未打开,则创建一个timeInterval为1秒的Timer对象,其对象为“ self”(当前视图控制器),并调用我的方法timerRunning()
  3. 由于我现在已经创建了一个计时器,该计时器现在正在运行,因此我将timerIsOn的布尔值更改为true。
  @IBAction func playBtnTapped(_ sender:Any){ 
  // 1 
progressView.isHidden =否
  // 2 
如果!timerIsOn {
  timer = Timer.scheduledTimer(timeInterval:1.0,target:self,选择器:#selector(timerRunning),userInfo:nil,重复:true) 
  // 3 
timerIsOn = true
  } 
  } 

单击播放按钮时将调用此timerRunning方法。 当我的倒数计时器变为0(零)时,此方法负责填充进度栏。

  func timerRunning(){ 
  timeRemaining-= 1 
 让completePercentage = Int((((Float(totalTime)-Float(timeRemaining))/ Float(totalTime))* 100) 
  progressView.setProgress(Float(timeRemaining)/ Float(totalTime),动画:false) 
  progressLabel.text =“ \(completionPercentage)%完成” 
  let minutesLeft = Int(timeRemaining)/ 60%60 
  let secondsLeft = Int(timeRemaining)%60 
  timeLabel.text =“ \(minutesLeft):\(secondsLeft)” 
  manageTimerEnd(秒:timeRemaining) 
  isOnBreak = true 
  } 

暂停方法还需要编写:

  1. 我在计时器对象上调用.invalidate方法。
  2. 我将timerIsOn的布尔值更改为false。
  @IBAction func pauseBtnTapped(_ sender:Any){ 
  // 1 
timer.invalidate()
  // 2 
timerIsOn = false
  } 

接下来,我编写resetButton函数方法:

  1. 我将计时器对象置于无效状态。
  2. 我将timeRemaining的值分配为1500秒(即25分钟),并指定当前的timeLabel来反映这一点。
  3. 我将timerIsOn布尔值更改为false。
  @IBAction func resetTapped(_ sender:Any){ 
  // 1 
timer.invalidate()
  // 2 
剩余时间= 1500
  timeLabel.text =“ 25:00” 
  // 3 
timerIsOn = false
  } 

让我知道您是否在下一个应用程序中使用倒数计时器!