Files
GetGoing/ProjectClock/StopwatchViewController.swift
T
2021-01-24 09:12:34 -05:00

156 lines
3.6 KiB
Swift

//
// StopwatchViewController.swift
// ProjectClock
//
// Created by Dallon Archibald on 1/23/21.
// Reference: https://youtu.be/H691qFRpaWA
import UIKit
/**
Stopwatch feature
*/
class StopwatchViewController: UIViewController
{
// UI Components
@IBOutlet weak var timeLabel: UILabel!
@IBOutlet weak var startButton: UIButton!
@IBOutlet weak var resetButton: UIButton!
@IBOutlet weak var tableView: UITableView!
// Time Components
var hours = 0
var minutes = 0
var seconds = 0
var started = false
var lappedTimes: [String] = []
var timer = Timer()
/**
Start/stop stopwatch
*/
@IBAction func start(_ sender: UIButton)
{
if !started
{
// Start timer
timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(count), userInfo: nil, repeats: true)
started = true
startButton.setTitle("Stop", for: .normal)
resetButton.setTitle("Lap", for: .normal)
}
else
{
// Stop timer
timer.invalidate()
started = false
startButton.setTitle("Start", for: .normal)
resetButton.setTitle("Reset", for: .normal)
}
}
@objc fileprivate func count()
{
// Add time (If it goes longer than 24 hours, the hour count should go to 25)
seconds += 1
if seconds == 60
{
minutes += 1
seconds = 0
}
if minutes == 60
{
hours += 1
minutes = 0
}
// Set label text
timeLabel.text = String(format: "%02i:%02i:%02i", hours, minutes, seconds)
}
/**
Lap/reset button
*/
@IBAction func lapOrReset(_ sender: UIButton)
{
if started
{
// Insert lap
lappedTimes.insert(timeLabel.text!, at: 0)
tableView.reloadData()
}
else
{
// Reset
seconds = 0
minutes = 0
seconds = 0
lappedTimes = []
timeLabel.text = "00:00:00"
tableView.reloadData()
}
}
}
/**
Table data source
*/
extension StopwatchViewController: UITableViewDelegate, UITableViewDataSource
{
/**
Define row count
*/
func tableView(_ _: UITableView, numberOfRowsInSection _: Int) -> Int
{
return lappedTimes.count
}
/**
Set cell at i
*/
func tableView(_ view: UITableView, cellForRowAt i: IndexPath) -> UITableViewCell
{
let cell = view.dequeueReusableCell(withIdentifier: "lapCell", for: i)
cell.textLabel?.text = lappedTimes[i.row]
cell.selectionStyle = .none
return cell
}
/**
Swipe left to delete cells at i
*/
func tableView(_ view: UITableView, commit: UITableViewCell.EditingStyle, forRowAt i: IndexPath)
{
if commit == .delete
{
lappedTimes.remove(at: i.row)
view.deleteRows(at: [i], with: .automatic)
}
}
}
/**
Class to set relative font size for the stopwatch
*/
class StopwatchText: UILabel
{
@IBInspectable var iPhoneFontSize: CGFloat = 0
{
didSet
{
overrideFontSize(iPhoneFontSize)
}
}
func overrideFontSize(_ fontSize: CGFloat)
{
let size = UIScreen.main.bounds.size
let width = UIDevice.current.orientation.isPortrait ? size.width : size.height
// ViewWidth-based font size
font = font.withSize(0.22 * width)
}
}