0

カウントダウンタイマーを作成しましたが、うまく機能します。しかし、ゼロに達するとカウントダウンが続きます。したがって、-1、-2、-3などが表示されます。これを防ぐにはどうすればよいですか。

これは、実装ファイルからの私のコードです。

@implementation ViewController

-(IBAction)start {

    myTicker = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(showActivity) userInfo:nil repeats:YES];
}

-(IBAction)stop {
    [myTicker invalidate];
}

-(IBAction)reset {
    time.text = @"0";
}

-(void)showActivity {
    int currentTime = [time.text intValue];
    int newTime = currentTime -1;
    time.text = [NSString stringWithFormat:@"%d", newTime];
}

私はどこかにいくつかのコードが欠けていると思いますか?

4

1 に答える 1

0

簡単な修正は次のとおりです。

int newTime = currentTime - 1;

の中へ:

int newTime = (currentTime > 0) ? currentTime - 1 : 0;

これにより、カウントダウンタイマーがゼロを下回るのを防ぐことができます。それがあなたが必要とするすべてであるならば、それは十分であるはずです。


タイマーがゼロに達しても、タイマーをオフにしたり、アクションを実行したりすることはありません。そのためには、上の行の後に次のブロックのようなものを追加する必要があります。

if ((currentTime > 0) && (newTime ==0)) {
    // optionally turn off timer
    fireZeroEvent ();
}

fireZeroEvent()そしてあなたがする必要があることは何でもするための機能を提供します。

タイマーを再作成せずに設定するだけでカウントダウンを再開できるように、タイマーを実行したままにしておきたい場合があるため、オプションでタイマーをオフにすることをお勧めしますtime.text

そのため、fireZeroEvent()は1から0への遷移時にのみ呼び出され、タイマーがゼロに達した後に起動するたびに呼び出されるわけではありません。

于 2012-04-05T13:13:06.017 に答える