3

次を示すタイマーを作成しようとしています-時間:分:秒:ミリ秒。これが私のコードです:

var timer = NSTimer()
var startTime = NSTimeInterval()

func updateTime()
{
    var currentTime = NSDate.timeIntervalSinceReferenceDate()
    var elapsedTime : NSTimeInterval = currentTime - startTime

    let hours = UInt8(elapsedTime / 3600.0)
    elapsedTime -= (NSTimeInterval(hours) * 3600)

    let minutes = UInt8(elapsedTime / 60.0)
    elapsedTime -= (NSTimeInterval(minutes) * 60)

    let seconds = UInt8(elapsedTime)
    elapsedTime -= NSTimeInterval(seconds)

    let fraction = UInt8(elapsedTime * 100)

    let strHours = String(format: "%02d", hours)
    let strMinutes = String(format: "%02d", minutes)
    let strSeconds = String(format: "%02d", seconds)
    let strFraction = String(format: "%02d", fraction)

    timeLabel.text = "\(strHours):\(strMinutes):\(strSeconds):\(strFraction)"
}

@IBAction func start(sender: AnyObject) {
    if !timer.valid {
        let aSelector : Selector = “updateTime”
        timer = NSTimer.scheduledTimerWithTimeInterval(0.01, target: self, selector: aSelector, userInfo: nil, repeats: true)
        startTime = NSDate.timeIntervalSinceReferenceDate()
    }
}

別の方法でタイマーに 5 秒を追加するにはどうすればよいですか? (明らかに、 global を作成する必要がありますがvar、今のところ単純にしようとしており、最初に実際に 5 秒を追加してから、グローバル部分について心配します。) 以下を変更/追加してみました:

var seconds = UInt8(elapsedTime)
seconds += 5 // Error here...
elapsedTime -= NSTimeInterval(seconds)

しかし、次のようなエラーが表示されます。

致命的なエラー: 浮動小数点値は UInt8.min より小さいため、UInt8 に変換できません

タイマーに 5 秒を追加する正しい方法は何ですか?

4

1 に答える 1

3

タイマーを無効にしてから、新しいタイマーを作成します。タイマーの時間間隔は変更できません。

エラーに関する限り、elapsedTimeおそらく負であり、エラーが発生します。UInt8.minです0

タイマーはストップウォッチではありません。は、特定のNSTimer時間に発火します。

ストップウォッチのようなものでは、開始日を設定するだけです。次に、1 秒に設定されたタイマーを使用して、1 秒ごとに表示を更新できます。現在の時刻と開始日の差を表示します。

于 2015-08-20T20:17:58.673 に答える