2014-10-30 95 views
-1

我有一個函數讓我有一段時間打開應用程序,但我不希望它是靜態的,我希望它是動態的,每秒更新一次。我認爲它正在循環中,但我不知道如何去做。做一個循環可以工作,但如果你有更好的方式做,請回答。這裏是我的功能:在NSDate()中每秒鐘更新一次函數 - Swift

func timeNowString() -> NSString { 
     let date = NSDate() 

     var outputFormat = NSDateFormatter() 
     outputFormat.locale = NSLocale(localeIdentifier:"en_US") 
     outputFormat.dateFormat = "HH:mm:ss" 
     let timeString = outputFormat.stringFromDate(date) 
     return timeString; 
    } 

問題:我如何使這個功能動態?所以它每秒都會更新,而不是靜態標籤。

如果您有任何問題,請在下面評論。

+0

可能是一個NSTimer或類似的東西,也許在後臺線程中使用日期和格式邏輯(如果它最終過於密集)。 – 2014-10-30 06:29:22

+0

@MillieSmith我只是試圖做一個實時的時間顯示將工作? – alex 2014-10-30 06:31:25

+0

@Grapeapplesauce是的,它會的。閱讀[NSTimer的官方文檔](https://developer.apple.com/Library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSTimer_Class/index.html)。 – 2014-10-30 06:31:49

回答

2

試試這個。你需要添加一個標籤和一個按鈕,並將它們連接到textLabel並啓動IBAction。你可以修改它來添加小時(這裏只是分鐘/秒),並在需要的地方添加一個timer.invalidate()。

import UIKit 

class ViewController: UIViewController { 

    @IBOutlet var timeLabel: UILabel! 

    @IBAction func start(sender: AnyObject) { 
     var timer = NSTimer() 
     if !timer.valid { 
      let selector : Selector = "countTime" 
      timer = NSTimer.scheduledTimerWithTimeInterval(0.01, target:self, selector: selector, userInfo: nil, repeats: true) 
      startTime = NSDate.timeIntervalSinceReferenceDate() 
     } 
     let timeNow = timeNowString() as String 
     for item in timeNow { 
      time = timeNow.componentsSeparatedByString(":") 
     } 
    } 

    var time = [String]() 
    var startTime = NSTimeInterval() 

    override func viewDidLoad() { 
     super.viewDidLoad() 

    } 

    func countTime() { 
     var currentTime = NSDate.timeIntervalSinceReferenceDate() 
     var elapsedTime: NSTimeInterval = currentTime - startTime 
     var adjustedTime = Int(elapsedTime) + 3600*time[0].toInt()! + 60*time[1].toInt()! + time[0].toInt()! 

     var hours = Int(Double(adjustedTime)/3600.0) 
     let minutes = Int(Double(adjustedTime - hours*3600)/60.0) 
     let seconds = adjustedTime - hours*3600 - minutes*60 

     let startHours = hours > 9 ? String(hours):"0" + String(hours) 
     let startMinutes = minutes > 9 ? String(minutes):"0" + String(minutes) 
     let startSeconds = seconds > 9 ? String(seconds):"0" + String(seconds) 

     timeLabel.text = "\(startHours):\(startMinutes):\(startSeconds)" 
    } 


    func timeNowString() -> NSString { 
     let date = NSDate() 
     var outputFormat = NSDateFormatter() 
     outputFormat.locale = NSLocale(localeIdentifier:"en_US") 
     outputFormat.dateFormat = "HH:mm:ss" 
     let timeString = outputFormat.stringFromDate(date) 
     return timeString; 
    } 
} 
+1

這只是從0開始算起,你如何使它從實時數起? – alex 2014-10-30 15:44:26

+0

你必須得到真正的時間,並使用我給你的方法來從那裏算起。我從你的代碼中假定你知道如何以正常的日期格式獲取當前時間。 – 2014-10-30 15:46:14

+1

'FUNC timeNowString() - >的NSString { 令日期=的NSDate() VAR OUTPUTFORMAT = NSDateFormatter() outputFormat.locale = NSLocale(localeIdentifier: 「EN_US」) outputFormat.dateFormat = 「HH:MM:SS」 let timeString = outputFormat.stringFromDate(date) return timeString; ''是獲得真實時間的代碼,但是如何在我的代碼中實現它。謝謝你在我的所有問題上給予的幫助很大 – alex 2014-10-30 15:48:26