swiftで特定の時間までカウントさせるコードを書いています。
ボタンを押してカウントダウンを進めることはできたのですが、設定秒数よりも短い時間でカウントが始まってしまいます。
swift
1import UIKit 2 3class ViewController: UIViewController { 4 5 var timer : Timer? 6 var diff : Date! 7 var diff2 :Date! 8 var stopTime : Date! 9 var currentDate = Date() 10 var startTime = Date() 11 @IBOutlet weak var label: UILabel! 12 13 let dateFormatter = DateFormatter() 14 15 let userCalendar = Calendar.current 16 17 let requestedComponent: Set<Calendar.Component> = [.day,.hour,.minute,.second] 18 19 override func viewDidLoad() { 20 super.viewDidLoad() 21 // Do any additional setup after loading the view. 22 23 } 24 25 26 27 @IBAction func start(_ sender: Any) { 28 29 30 if let startTiemr = timer { 31 if startTiemr.isValid == true { 32 return 33 34 } 35 } 36 currentDate = Date() 37 38 // print(currentDate) 39 timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(print), userInfo: nil, repeats: true) 40 41 } 42 43 func printTime() -> DateComponents { 44 dateFormatter.dateFormat = "dd/MM/yy hh:mm:ss" 45 46 startTime = Date() 47 // print(startTime) 48 let endTime = Date(timeInterval: 10 , since: currentDate) 49 // print(endTime) 50 let timeDifference = userCalendar.dateComponents(requestedComponent, from: startTime, to: endTime) 51 label.text = "(timeDifference.day!) Days (timeDifference.hour!) Hours (timeDifference.minute!) Minutes (timeDifference.second!) Seconds" 52 return timeDifference 53 } 54 55 @objc func print() { 56 _ = printTime() 57 58 } 59 override func viewDidAppear(_ animated: Bool){ 60 //カウントを0にする 61 // count = 0 62 //タイマー表示を更新する 63 _ = printTime() 64 } 65} 66
上記の例ですと10秒からカウント開始したいところ、9秒で始まってしまいます。
アドバイスをいただけたら幸いです。
開発環境
Xcode10.3
Swift5.0.1
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。