0

私は今まで数日間インターネットを検索してきました。役立つ情報をいくつか見つけましたが、物事を完璧にしたいだけです。

秒のみを使用するカウントダウン アプリを作成しようとしています。現在のコードは少し複雑すぎて、幹線道路から外れている可能性があります。直していただける方募集中です。

- (void)updateTimer{

NSDate *currentDate = [NSDate date];
NSTimeInterval timeInterval = [currentDate timeIntervalSinceDate:startDate];
NSDate *timerDate = [NSDate dateWithTimeIntervalSince1970:timeInterval];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"s"];
[dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0.0]];
NSString *timeString=[dateFormatter stringFromDate:timerDate];

// where the part change time string back to int
NSString *changeToInt = timeString;
int stringInt = [changeToInt integerValue];

// loop for count down numbers
if ((buttValue - stringInt) > 0) {
    leftTime = buttValue - stringInt;
    [self updateValue];
} else {
    leftTime = 0;
    [self updateValue];
}

}

コードの 2 つの問題、1) 整数を取得するためにすべての日付の書式設定を行う必要がありますか? 2) ループで 2 つの変数を使用しました。

4

3 に答える 3

0

何が必要なのか正確にはわかりませんが、今から既知の日付までの秒数を取得したいだけだと思います。timeIntervalSinceNowメソッドは、受信者の日付から現在までの秒数を表すNSInteger値を提供します。これは、受信者が現在よりも早い場合は負の値になります(そうでない場合は正になります)。

したがって、より明確にするために:

- (void)updateTimer
{
    leftTime = MAX(0, -[startDate timeIntervalSinceNow]); //if less than 0 will be forced to 0 -> date reached
    [self updateValue];
}

私が言ったように、これがあなたが望むものかどうかはわかりません。そうでない場合は、ごめんなさい。幸運を!

于 2012-03-26T09:11:04.353 に答える
0
 -(void)initialiseTimer
{
    [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(timeElapsed) userInfo:nil repeats:YES];
    startDate = [[NSDate date] retain];

}
-(void)timeElapsed
{

    NSLog(@"Seconds elapsed since start date %d", abs([startDate timeIntervalSinceNow]));

}

それを操作して、カウントダウン スタイルのアプリを作成できます。

于 2012-03-26T09:18:05.433 に答える
0

このコードを使用してください!!

-(IBAction)startAndStop:(id)sender
{
    startDate = [[NSDate date]retain];
    if([btnStopWatch.titleLabel.text isEqualToString:@"Start"])
    {
        stopWatchTimer = [NSTimer scheduledTimerWithTimeInterval:1.0/100.0 target:self selector:@selector(updateTimer) userInfo:nil repeats:YES];
        [btnStopWatch setTitle:@"Stop" forState:UIControlStateNormal];
    }
    else if([btnStopWatch.titleLabel.text isEqualToString:@"Stop"])
    {
        [stopWatchTimer invalidate];
        [btnStopWatch setTitle:@"Start" forState:UIControlStateNormal];
    }
}
- (void)updateTimer
{
    NSDate *currentDate = [NSDate date];
    NSTimeInterval timeInterval = [currentDate timeIntervalSinceDate:startDate];
    NSDate *timerDate = [NSDate dateWithTimeIntervalSince1970:timeInterval];
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"HH:mm:ss"];
    [dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0.0]];
    timeString=[dateFormatter stringFromDate:timerDate];
    stopWatchLabel.text = timeString;
    NSLog(@"Seconds elapsed since start date %d", abs([startDate timeIntervalSinceNow]));

}
于 2012-03-26T10:14:35.720 に答える