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

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

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

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

Q&A

解決済

1回答

5046閲覧

stopボタンを押した時にループ処理から抜けたい

kei3

総合スコア7

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

0グッド

0クリップ

投稿2016/02/13 12:50

###実現したいこと
swiftで、stopボタンを押した時にループ処理から抜けたい

次のような処理を考えました。
・startボタン押す
・stopボタンが押されるまで、startボタンの処理をループする

###発生している問題
startボタンを押した後、stopボタンが押せない

xcodeのsimulatorで実行したところ、startボタンを押した後に上手くループ処理が始まり1秒ごとに「こんにちは」が表示されました。ですがstopボタンを押そうとしたところ、startボタンが押された状態のままで他の操作を受け付けません。無限ループになっているのが原因かと思っているのですが、どのように回避すれば良いでしょうか。

swift

1 // ループ判定用 2 var startStop = true 3 4 //Startボタン 5 @IBAction func clickStart(sender: AnyObject) { 6 while startStop == true{ 7 print("こんにちは") 8 usleep(1000000); //1秒スリープ 9 } 10 } 11 12 //Stopボタン 13 @IBAction func clickStop(sender: AnyObject) { 14 //ストップ 15 startStop = false 16 }

###補足情報
ストップウォッチの処理が参考になるかと思い調べてみたのですが、タイマーの処理はinvalidate()を使うのが定番らしく上手く流用出来ませんでした。よろしくお願いします。
Swiftでストップウォッチにトライ!

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

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

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

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

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

guest

回答1

0

ベストアンサー

やりたいことが1秒に1回ずつ何かするのを繰り返したいということであれば、参考サイトに書かれているストップウォッチの処理のようにNSTimerで1秒に1回タイマーイベントを発生させて処理する方法をお勧めします。

本当にやりたいことが1秒に1回処理することではなく、とても時間のかかる一連の処理があって、その処理の途中でユーザーが処理のキャンセルを指示できるようにしたいということであれば、
http://qiita.com/koyopro/items/2432b01ebfe449272812
を参考にして、別スレッド(addOperationWithBlockの中)でループ処理を実行すれば、startボタンのイベントはリターンして戻るので、stopボタンが押せるようになります。
ただ、メインスレッド以外のスレッドではGUI操作ができない制約がありますので、GUI操作を伴わない処理だけを別スレッドに切り出す必要がありす。

投稿2016/02/13 15:57

TakeOne

総合スコア6299

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

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

kei3

2016/02/15 16:56

>やりたいことが1秒に1回ずつ何かするのを繰り返したいということであれば まさにその通りでした。 呼び出す関数の引数が(timer: NSTimer)でなければいけない事になかなか気がつかず苦戦していたのですが、先ほどNSTimerを使用して意図した通りに動くようになりました。詳しい説明ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問