0

私は初めての大きなアプリケーションに取り組んでいますが、設計上の小さな欠陥によりうっかりしてパニックに陥ってしまいました。ボタンを押すだけでカウントするタイマーを作成し、2 回目のタッチで 60 秒のカウントダウンを行うセカンダリ タイマーに移行します。

問題は、このプロセスを繰り返すと (kRest-Pause) 呼び出しが記憶されるという事実にあります。時間の継続なしでデフォルトの60のカウントダウンを作成しようとしています。メモリ内でそれを強制終了し、後続のボタンを押すたびに新しいインスタンスを作成する必要がありますか? それとも、集計時間を見て、新しい発生ごとに修正するロジック ゲームはありますか?

これにアプローチする方法がわかりません。リターンを使用して -if ステートメントを試してみました。どんな助けでもいただければ幸いです

編集:明確さの欠如について申し訳ありません。私はどんな口径のプログラミングでもかなりグリーンです。これまでのところ、メイン タイマーは 10 から 0 までカウントダウンし、0 から 120 までカウントアップします。その 2 分間の間にもう一度ボタンを押すと、0 ~ 120 のカウントが 60 秒間、またはボタンが 3 回目に押されるまで一時停止します。この 60-0 カウントダウンが 0 に達するか中断された場合、最初の 0-120 カウントアップがカウントを再開します。私の問題は、ボタンを 4 回押すと、デフォルトの 60 を保持せずに、中断した瞬間から 60-0 のカウントダウンが再開されることです。それは言葉の間違った使い方であり、広範にする方法ですが、私が思いついたものです.

kRest=60

-(void)increase{

    if (mode==1){
        count++;

        int d = 10-count;

        if (d==0){ timeLabel.text = @"Begin";
            [self startPlaybackForPlayer: self.startTimerSound];}

        else {timeLabel.text = [NSString stringWithFormat:@"%d", abs(d)];}

        if(d<0){
            //workign out
            active = TRUE;
            if (d <= -20) {
                [self stopTimer];                 
            }
        }
        else{
            //no user interface
            active = FALSE;



        }
    }
    else{
        pause++;
        countdownLabel.text = [NSString stringWithFormat:@"%d!", (kRest-pause)];
        NSLog(@"Paused at time %d", pause);


        UIColor *textColor = nil;
        if (pause % 2==0){
            textColor = [UIColor yellowColor];
        }
        else{
            textColor = [UIColor redColor];

        }
        timeLabel.textColor = textColor;

        if ((kRest-pause)==0){
            countdownLabel.text = [NSString stringWithFormat:@"%d!",pause];
            mode=1;
            pause=0;
            [button setTitle:@"Stop" forState:UIControlStateNormal];
            repCount++;
            myRepCount.text = [NSString stringWithFormat:@"Rep Count: %d", repCount];
            countdownLabel.text = @"";
        }
    }
}
4

1 に答える 1

1

タイマーを使用してこのカウンターにアクセスしている場合は、タイマーが使用するカウンターを更新できるはずです。読んでいる間は編集しないように、必ずオブジェクトを同期してください。

これが私の言いたいことの例です。

int counter = 0;

int limit = 60;

- (BOOL) incrementUntilReached{

    @synchronized(self){
        if (counter == limit) return YES;
        counter++;
        return NO;
    }
}

- (void) resetTimer{
    @synchronized(self){
        counter = 0;
    }
}

- (int) countsLeft {
    @synchronized(self){
        return limit - counter;
    }
}
于 2012-07-12T22:26:04.633 に答える