Swiftで遊ぼう! - 865 - Timerクラス
- Swiftで遊ぼう!の前書き-> Life-LOG OtherSide
- 初心者はここから!-> 50オヤジでもできるiOS開発
- 私の本業、オフィシャルなブログ-> Life-LOG
- Swift 3 対応
メソッドを決められたタイミングで発動させるために利用されるのがTimerクラスです。
このクラスの利用法は簡単なんで、ViewControllerで実装する例をよく見かけます。
class ViewController: UIViewController { // タイマークラスを初期化インスタンス化します。 var mainTimer = Timer() var countUp = 0 override func viewDidLoad() { super.viewDidLoad() } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } // ストーリーボード上のUIButtonから作った@IBActionメソッド @IBAction func startTimer(_ sender: UIButton) { // タイマーがスタートします。 // Timerクラスのタイマーが発動! // 1秒間隔で、countingメソッドが呼ばれます。 mainTimer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(counting), userInfo: nil, repeats: true) } // コンソールでカウントさせていくだけです。 func counting() { countUp += 1 print("\(countUp)") }
実は、このTimerをバックグラウンドで動かしたいので、少し考察をいれています。
このようにメインスレッドでコードすると、アプリをバックグラウンドに回したら止まるという説明なんで、試してみることにしました。
実は、シュミレーターを使っても再現することができないんです! これは知りませんでした。アプリを「Cmd + Shift + H」を使ってバックグラウンドにしても、カウンターは動き続けます。NSTimerからTimerに変更が加わり挙動が変わったのかと思いました。
そこで実機で動かしてみたんですが、やっぱりシュミレータと挙動が違うんですね。ホームボタンを押すとカウントアップはちゃんと止まりました...
やっぱりバックグラウンドでTimerを動かす勉強をしなければなりませんね(^^;)