###前提・実現したいこと
Xcode 8.3.2 、Swift初心者です。
http://mory.weblike.jp/wordpress/?p=64
https://teratail.com/questions/66101
上の2つ、他のサイトを参照にストップウォッチアプリを作ってみています。
現在、このコードだと「スタート」ボタン、「ストップ」ボタンを押した後に、もう一度「スタート」ボタンを押すと再び0秒からのスタートになってしまいます。
もう一度「スタート」ボタンを押したときに、iPhoneの時計アプリのように、「ストップ」ボタンを押したときのタイムからのカウントにしたいです。
###試したこと
http://d.hatena.jp/yamekodev/20120918/1347972548
上のサイトを参照してみましたが、今年Swiftデビューしたばかりなので、型の保持などがイマイチよくわかりませんでした。
もし、初心者の自分でもわかるように説明していただけたら幸いです。
###ソースコード
Swift
1 2import UIKit 3 4class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { 5 6 @IBOutlet weak var timeLabel: UILabel! 7 @IBOutlet weak var startstopButton: UIButton! 8 @IBOutlet weak var resetButton: UIButton! 9 10 var startTime: TimeInterval? = nil 11 var timer: Timer? 12 13 override func viewDidLoad() { 14 super.viewDidLoad() 15 16 // Do any additional setup after loading the view. 17 setButtonEnabled(startstop: true, reset: false) 18 } 19 20 func update(){ 21 if let t = self.startTime { 22 let time:Double = NSDate.timeIntervalSinceReferenceDate - t 23 let sec: Int = Int(time) 24 let msec: Int = Int((time - Double(sec))*100.0) 25 if sec < 3600 { 26 if sec < 0 { 27 self.timeLabel.text = "00:00.0" 28 } else { 29 self.timeLabel.text = NSString(format: "%02d:%02d.%01d", sec/60, sec%60, msec/10) as String 30 } 31 } else { 32 self.timeLabel.text = NSString(format: "%02d:%02d:%02d.%01d", sec/3600, sec/60, sec%60, msec/10) as String 33 } 34 } 35 } 36 37 func setButtonEnabled(startstop: Bool, reset: Bool) { 38 self.startstopButton.isEnabled = startstop 39 self.resetButton.isEnabled = reset 40 } 41 42 var counter = 0 43 var amari = 0 44 45 @IBAction func startstopTimer(_ sender: UIButton) { 46 counter = counter + 1 47 amari = counter % 2 48 49 if amari > 0 { 50 setButtonEnabled(startstop: true, reset: false) 51 startstopButton.setTitle("ストップ", for: .normal) 52 self.startTime = NSDate.timeIntervalSinceReferenceDate 53 self.timer = Timer.scheduledTimer(timeInterval: 0.01, target: self, selector: #selector(ViewController.update), userInfo: nil, repeats: true) 54 } else { 55 setButtonEnabled(startstop: true, reset: true) 56 startstopButton.setTitle("スタート", for: .normal) 57 self.timer?.invalidate() 58 self.timer = nil 59 } 60 } 61 62 @IBAction func resetTimer(_ sender: UIButton) { 63 setButtonEnabled(startstop: true, reset: false) 64 self.startTime = nil 65 self.timeLabel.text = "00:00.0" 66 } 67 68 override func didReceiveMemoryWarning() { 69 super.didReceiveMemoryWarning() 70 // Dispose of any resources that can be recreated. 71 } 72 73} 74
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/08/24 12:15
2017/08/24 12:38
2017/08/24 14:00
2017/08/24 14:21
2017/08/25 04:05
2017/08/25 09:41