- ベストアンサー
swiftでストップウォッチに計算機能を追加
- swiftで作成したストップウォッチアプリに、一つの作業が完了するまでの時間を計測し、1時間あたりの作業数を計算して表示する機能を追加します。
- 計算式は、3600を計測した秒数で割り、1時間あたりの作業数を求めます。
- 具体的な実装方法として、現状のソースコードに、計測した秒数をもとに計算し、結果を画面に表示するコードを追加します。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
storyboardでボタンを一個追加し、そのボタンのTouchUpInsideとpushWorkButtonを繋いでください ボタンを押すと、現在の秒数と前回にボタンを押した時の秒数で1時間あたりの作業数を計算し、結果だけをpageラベルに表示させます。 詳しい説明をすれば、 まず、sec変数をupdate()の外で定義することによって他のメソッドからsecの値を取得できるようにします。 また、前回にボタンが押された時の秒数を記録しておくworkStartSec変数も定義しておきます。 reset時に忘れずにsecとworkStartSecを0にしておきます。 次にボタンが押された時の動作を書きます。 ボタンが押されたらまずsecとworkStartSecの値が同じでないことを確認します。 計測した秒数が0秒だと0で割る事になってエラーとなるからです。 今の場合、そうならないようにする為にsecとworkStartSecの値が同じだったらworkStartSecの値を-1するようにしています。 次に、計算した結果をpageラベルのテキストに入れます。 あとは次にボタンが押された時用にworkStartSecにsecの値を入れておきます これで完了です。 今は簡単に書いただけなので使い物になるようなものではありませんが、そこは自由に改良してください。 //以下コード import UIKit class ViewController: UIViewController { @IBOutlet weak var timerLabel: UILabel! @IBOutlet weak var startButton: UIButton! @IBOutlet weak var stopButton: UIButton! @IBOutlet weak var resetButton: UIButton! @IBOutlet weak var page: UILabel! var startTime: NSTimeInterval? = nil var timer: NSTimer? var elapsedTime: Double = 0.0 var sec: Int = 0 var workStartSec: Int = 0 override func viewDidLoad() { super.viewDidLoad() setButtonEnabled(true, stop: false, reset: false) // Do any additional setup after loading the view, typically from a nib. } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } func setButtonEnabled(start:Bool, stop:Bool, reset:Bool) { self.startButton.enabled = start self.stopButton.enabled = stop self.resetButton.enabled = reset } func update() { if let t = self.startTime { let time: Double = NSDate.timeIntervalSinceReferenceDate() - t + self.elapsedTime sec = Int(time) let msec: Int = Int((time - Double(sec)) * 100.0) self.timerLabel.text = NSString(format: "%02d:%02d:%02d", sec/60, sec%60, msec) as String } } @IBAction func startTimer(sender: AnyObject) { setButtonEnabled(false, stop: true, reset: false) self.startTime = NSDate.timeIntervalSinceReferenceDate() // 2001/1/1 0:0:0 self.timer = NSTimer.scheduledTimerWithTimeInterval(0.01, target: self, selector: Selector("update"), userInfo: nil, repeats: true) workStartSec = sec } @IBAction func stopTimer(sender: AnyObject) { setButtonEnabled(true, stop: false, reset: true) if let t = self.startTime { self.elapsedTime += NSDate.timeIntervalSinceReferenceDate() - t self.timer?.invalidate() self.timer = nil } } @IBAction func resetTimer(sender: AnyObject) { setButtonEnabled(true, stop: false, reset: false) self.elapsedTime = 0.0 self.startTime = nil self.timerLabel.text = "00:00:00" sec = 0 workStartSec = 0 } @IBAction func pushWorkButton(sender: AnyObject) { if (sec == workStartSec) {workStartSec--} page.text = String(3600/(sec-workStartSec)) workStartSec = sec } }
お礼
お返事が遅くなり申し訳ありません。具体的なコードまで書いて頂き、本当にありがとうございます。さっそく、ご教授頂いたコードをもとに少し作業を進めていきます。本当にありがとうございます。