2015-09-19 38 views
0

我試圖製作一個應用程序,告訴我們從現在到其他時間的其餘時間,直到一小時後。斯威夫特:試圖製作一個應用程序,從現在到一小時後倒計時

這是代碼,但現在它只有一個函數,通過從當前時間減少一秒來告訴我們倒計時的時間。

我在想,我還沒有確定「cnt」 的定義,這就是爲什麼我認爲它不起作用。

有人可以告訴我的原因和解決方案?

import UIKit 

class ViewController: UIViewController { 

var cnt : Int = 0 
var timer : NSTimer!//NSTimerというデフォルト機能から引っ張る 
var myInt:Int = 0 

override func viewDidLoad() { 

    let myDate: NSDate = NSDate() 
    let myCalendar: NSCalendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)! 
    let myComponents = myCalendar.components([.Year, .Hour, .Minute, .Second], 
     fromDate: myDate) // myDate、すなわちNSDateから要素として引っ張り出してる 

    timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: "onUpdate:", userInfo: nil, repeats: true)//カウントダウンのインターバル 
    timer.fire() 

    var myStr: String = "\(myComponents.hour)" 
    myStr += "\(myComponents.minute)" 
    myStr += "\(myComponents.second)" 

    myInt = Int(myStr)! // toInt()がSwift2より無効になったようです。myInt=Str(my components,hour,minute,second)=現時刻 

} 

func onUpdate(timer : NSTimer){ 
    cnt += 1//cnt+1=cnt, 
    let count = myInt - cnt //殘り時間=現在時刻ー現在時刻に1時間足した時刻 
    print(count) // println()は、Swift2よりDeprecatedになりました。 
} 

} 
+0

這是做錯的方法。相反,設置一個目標日期,並且每當我們想要更新我們的UI時,計算現在和當前時間之間的差異。我們無法保證每次調用'onUpdate()'之間都有1秒的時間間隔。但是,我們可以很容易地計算從現在起1小時(恰好)的時間,並且我們可以輕鬆計算從現在到未來某個時間點之間的確切時間。 – nhgrif

+0

只需加3600(秒= 1小時)到總時間 –

回答

0

很難理解你在問什麼,但我會盡我所能。

在您的viewDidLoad方法中,您將myInt設置爲myStr的整數表示形式。如果時間是18:30:50,則myInt將等於183050。這不是一個適當的時間表示。時間以60爲底,整數以10爲底。如果要將時間表示爲單個數字,則可以使用timeIntervalSinceDatetimeIntervalSinceReferenceDatetimeIntervalSince1970來獲取相對於您選擇的某個時期或內置到基金會中的某個時期的日期的NSTimeInterval(即小數秒)表示。

每當定時器發生火災時,從myInt中減1就不會給你剩餘時間的指示。

此外,NSTimer不是一個準確的方法來保持時間。您應該將開始日期保存爲屬性並根據以下內容確定剩餘時間:timeIntervalSinceDate

func onUpdate(timer : NSTimer){ 
    let currentTime = NSDate() 
    let timeElapsed = currentTime.timeIntervalSinceDate(myDate) 
    println(timeElapsed) 
} 

如果你想顯示在幾分鐘內經過的時間,你可以通過60除以它你可以看着NSDateComponentsFormatter輕鬆搞定的時間間隔的字符串表示。

如果你想倒計時停止一個小時,然後檢查時timeElapsed超過3600

如果你希望它是從1小時顯示倒計時,然後減去timeElapsed從3600

+1

我會以相反的方式做到這一點。它不太抽象。開始時間完全不相關。如果我們倒計時,我們只關心我們在什麼時候倒計時。我們從倒計時的瞬間開始計算我們計算的時間。 – nhgrif

+0

你的意思是獲得一個未來1小時的NSDate並將其用作時間參考? – shim

+0

對於這個特定的問題,基本上是。 – nhgrif

相關問題