QA@IT

[Titaniumb Mobile]アラームアプリでアラームが止まらない

3071 PV

1ヶ月前にTitanium MobileでiPhoneアプリの勉強をはじめた初心者です。
勉強のため、現在アラームアプリを作っています。
一箇所で詰まってしまい、ずっと悩んでいますが、解決策がわからず、
アドバイスいただけないでしょうか。

[詰まっているポイント]

flagという変数を作って、最初はflag=1をたてる。
①flag==0の状態でbuttonを押すとカウントダウン開始し、flag=0をたてる。

②flag==1の状態でbuttonを押すとカウントダウン停止し、flag=2をたてる。

③flag==2の状態でbuttonを押すとリセットし、flag=1をたてる。

という感じにしたいのですが、①でタイマーが止まらないのです。
デバッグ画面で見ると、stopボタンを押した瞬間にbutton.flagに0が入り、
それがまた再評価されてしまい、カウントダウンが再開されているような状況
です。

タイマーが止まるように
するにはどうすればよいでしょうか。

アドバイスよろしくお願いいたします。

    var setminute = 0.1;
    var usersetTime =  setminute * 60; 
    var durationTime = 0; 
    var currentTime = usersetTime - durationTime;
    var alarm = Ti.Media.createSound({url:"el_alarm.wav", looping:true});
    var timer;

    function countdown(){   
                    if(currentTime>0){
                        durationTime = durationTime + 1;
                        currentTime = usersetTime - durationTime;
                        var minute = Math.floor(currentTime/60);
                        var sec = Math.floor(currentTime - minute*60);
                        label.text = minute + ":" + ("0" + sec).slice(-2);
                    }
                    else{
                        stopcountdown();
                        alarm.play();
                        label.text = "Wake up!";
                        button.title="OK";
                        button.flag="2";
                    }                   
    }

    function startcountdown(){
        timer = setInterval(countdown, 1000);
        button.title="Stop";
        button.flag="1";
    }

    function stopcountdown(){
        clearInterval(timer);
        button.title = "Start";
        button.flag="0";
    }

    function resetcountdown(){
        clearInterval(timer);
        usersetTime =  setminute * 60; 
        durationTime = 0; 
        currentTime = usersetTime - durationTime;
        button.flag="0";
    }

    button.flag = "1"   
    button.addEventListener('click', function(){


        if(button.flag=="1"){
            stopcountdown();
        }

        if(button.flag=="0"){
            startcountdown();
            button.title = "Stop";      
        }

        if(button.flag=="2"){
            alarm.stop();   
            resetcountdown();
            label.text = "Select timer";
            button.title = "Stopped";   
        }
    });

return tab;
};

回答

検証はしてませんが


        if(button.flag=="1"){
            stopcountdown();
        }else if(button.flag=="0"){
            startcountdown();
            button.title = "Stop";      
        }else if(button.flag=="2"){
            alarm.stop();   
            resetcountdown();
            label.text = "Select timer";
            button.title = "Stopped";   
        }

でいかがでしょうか。

編集 履歴 (0)

おーー動きました!!
なるほどelse ifにしないといけなかったのですね。
初歩でやったはずだったのにすっかり忘れていました。
やっぱり基礎からしっかり固めないとだめですね。

どうもありがとうございましたm_ _m

編集 履歴 (0)
  • 感想やコメントは回答として投稿するのではなく、ノートでどうぞ。解決したら、accept (緑色のチェックマークをクリック)も! -
  • すみません、はじめて投稿したので使い方を間違えてしまいました。投稿が反映されてから初めて気づきました。あと、自分が書いたコメントのところで緑のチェックマークを押してしまいました。これって取り消すこと可能でしょうか? -
  • 了解です。またどうぞお気軽に質問をどうぞ。acceptの取り消しは今はできません、スミマセン -
ウォッチ

この質問への回答やコメントをメールでお知らせします。