0

私はそれ自体でうまく機能しているストップウォッチを持っていますが、タブバーから別のビューから戻ると、ストップウォッチはいくつかの奇妙なことをします(ナビゲーションビューの戻るボタンをタップするとうまくいきます)。

  1. ストップウォッチラベルは、ビューを表示しているときに表示されているはずですが、ユーザーが他のタブから戻ると非表示になります。

  2. ユーザーが他のタブをタップしてストップウォッチタブをもう一度タップしたときにストップウォッチが実行されている場合、ストップウォッチは-31:-23.-64に移動し、停止ボタン(タイマーをリセットして開始ボタンを表示する必要があります)タップしても何もしません。

  3. ユーザーが他のタブをタップしてストップウォッチタブをもう一度タップしたときにストップウォッチが実行されていない場合、ストップウォッチは正常に起動しますが、ユーザーがスタートボタンをタップしてもストップボタンは表示されません。

これが私のコードです:

.h:

@interface ViewController : UIViewController {
    IBOutlet UIButton *btnStart;
    IBOutlet UIButton *btnStop;
    IBOutlet UILabel *lblTimer;
    NSTimer *stopWatchTimer;
    NSDate *stopDate;
    NSDate *startDate;

}

@property (strong, nonatomic) IBOutlet UILabel *lblTimer;

- (IBAction)btnStart:(id)sender;
- (IBAction)btnStop:(id)sender;

.m:

- (void)updateTimer
{
    NSDate *currentDate = [NSDate date];
    NSTimeInterval timeInterval = [currentDate timeIntervalSinceDate:startDate];
    NSDate *timerDate = [NSDate dateWithTimeIntervalSince1970:timeInterval];
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"mm:ss.SS"];
    [dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0.0]];
    NSString *timeString=[dateFormatter stringFromDate:timerDate];
    lblTimer.text = timeString;
}

- (IBAction)buttonStart:(id)sender {

    startDate = [NSDate date];

    // Create the stop watch timer that fires every 1ms
    stopWatchTimer = [NSTimer scheduledTimerWithTimeInterval:1.0/100.0
                                                      target:self
                                                    selector:@selector(updateTimer)
                                                    userInfo:nil
                                                     repeats:YES];
    btnStop.hidden = NO;
    btnStart.hidden = YES;
}

- (IBAction)buttonStop:(id)sender {

    [self updateTimer];
    btnStop.hidden = YES;
    btnStart.hidden = NO;

    [stopWatchTimer invalidate];
    stopWatchTimer = nil;
}

これを修正するために何ができるか、または他に何か必要な場合はお知らせください。

4

1 に答える 1

1

まず、startDate がおかしくなっているようです。initが呼び出されています。おそらくただのはず[NSDate date]です。

ビューが表示されないのは...日付を計算した後、timer.text何かに設定されています。タイマーとは?本当にそうであってはなりませんtimer.titleか? それを行った後、それが必要な場合は[timer setNeedsDisplay]、コントロールでテキストが更新されていることを確認する必要がある場合があります。

テキストがまだごちゃごちゃしている場合は、更新頻度を減らしてみてください。おそらく 10 秒ごとに、テキストの動作が改善されるかどうかを確認します。

于 2013-01-01T05:59:53.220 に答える