質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

2回答

2947閲覧

UITableViewをタップするとTimerが停止してしまう。

Aki_1988

総合スコア44

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2017/05/21 02:31

###前提
UITableViewとTimerを同一のViewControllerに追加しています。
以下のようなイメージです。
イメージ説明

###発生している問題
Timerのカウント開始後、テーブルをタップすると、タイマーのカウントが一時停止。タップをやめると、自動的にカウント再開される、現象が発生しており、悩んでおります。

※テーブルのタップについて
正確には、タップした後、少しでもスワイプすると(座標をずらす)とカウントが一時停止されます。

UITableViewとTimerのドキュメントを確認してみたのですが、原因が特定できておりません。
原因と、可能であれば対処方法をご教授頂ければ幸いです。

###該当のソースコード
以下はタイマーのソースになります。
テーブルに関しては、特別な実装は行っていないため割愛いたします。

swift

1@IBAction func timerBtn(_ sender: Any) { 2 if timerRunning == false { 3 startTimer() 4 } else { 5 timerRunning = false 6 timer.invalidate() 7 print(countNum) 8 countNum = 0 9 } 10 11 } 12 13 @IBOutlet weak var record: UILabel! 14 15 func startTimer(){ 16 timer = Timer.scheduledTimer( 17 timeInterval: 1, 18 target: self, 19 selector: #selector(self.timerCounter), 20 userInfo: nil, 21 repeats: true) 22 timerRunning = true 23 } 24 25 func timerCounter(){ 26 countNum += 1 27 record.text = String(countNum) 28 print(countNum) 29 }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ユーザーが操作時にもタイマーを発火させるにはモードをCommonModeにすればいいです。
こちらが参考になるかと。

投稿2017/05/21 02:56

toki_td

総合スコア2850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Aki_1988

2017/05/21 03:18

回答ありがとうございます!記事を参考に勉強します!
guest

0

ベストアンサー

https://blog.77jp.net/iphone-dev-nstimer-other-thread-sample

Timer.scheduledTimer で単に処理するだけだと、UIの操作と Timer の処理が共に main スレッドで行われるためどちらかが止まります。その為、Timerを処理するスレッドを変更してやれば大丈夫です。

func startTimer(){ timer = Timer.scheduledTimer( timeInterval: 1, target: self, selector: #selector(self.timerCounter), userInfo: nil, repeats: true) RunLoop.current.add(timer, forMode: .UITrackingRunLoopMode) // 追加 timerRunning = true }

投稿2017/05/21 03:09

TakeoAsai

総合スコア880

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問