初心者の方必見!!!
Swift5にてカウントダウンタイマーを作成します。
このアプリを実行するには2つのファイルに書き出します。
・DataManager.swift (ファイルの作成が必要)
・ViewController.swift(最初からあります)
DateManager.swift
import Foundation
import UIKit
class DateManager {
private let formatter = DateFormatter()
private let date = Date()
private var dateStr: String?
private let calendar = Calendar(identifier: .gregorian)
init(){
formatter.timeZone = TimeZone.ReferenceType.local
formatter.dateFormat = "yyyy-MM-dd-HH-mm-ss"
dateStr = ""
}
//現在時刻を返します"yyyy-MM-dd-HH-mm-ss"
func getNowDate() -> String{
dateStr = formatter.string(from: date)
guard let now = dateStr else { return ""}
return now
}
//設定したカウントダウンの秒数を返してくれます
func getXmaxTimeInterval() -> Int {
guard let xmas = calendar.date(from: DateComponents(year: 2019, month: 12, day: 25)) else { return 0}
let spanFromWow = xmas.timeIntervalSinceNow
return Int(floor(spanFromWow))
}
}
ViewController.swift
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var snowView: UIView!
@IBOutlet weak var countLabel: UILabel!
let date = DateManager()
var timer: Timer!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(true)
//カウントダウン
timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(self.update), userInfo: nil, repeats: true)
timer.fire()
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(true)
timer.invalidate()
timer = nil
}
@objc func update(tm: Timer) {
let count: Int = date.getXmaxTimeInterval()
let count2: TimeInterval = TimeInterval(count)
let formatter = DateComponentsFormatter()
// 表示フォーマットを変更..positionalや.fullで表示が変わります.
formatter.unitsStyle = .brief
// 使用する単位 .minuteのみにすると232,071minのように出力されます.
formatter.allowedUnits = [.year, .month, .day, .hour, .minute, .second]
// 作成したformatterでtimeintervalをstringに変換します.
print(formatter.string(from: count2)!) // →5mths 10days 3hr 44min 28sec
//時間をラベルに表示
countLabel.text = formatter.string(from: count2)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
StoryBoardにてラベルと背景画像をOutlet接続したら完成します。
できたらコメントにグヘグヘ!お願いしますw
分からないことがありましたら、遠慮なくコメントくださいね。