読者です 読者をやめる 読者になる 読者になる

Swiftで遊ぼう! on Hatena

あしたさぬきblogでやってた初心者オヤジのiOSプログラミング奮闘記がHatenaに来ました

Swiftで遊ぼう! - 865 - Timerクラス

メソッドを決められたタイミングで発動させるために利用されるのが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を動かす勉強をしなければなりませんね(^^;)