0

こんにちは、時間に基づいて iPhone アプリで進行状況バーを使用したいのですが、たとえば、ある人が午前 10:00 に旅を開始し、午前 11:00 に終了した場合、5 分ごとに現在の時刻と比較して進行状況を更新します。可能

4

2 に答える 2

2

これを達成するために単純なものを使用できますNSTimer

もちろん、これらの変数はviewDidLoadヘッダー ファイルで宣言する必要があります。

UIProgressView *myProgressView = [[UIProgressView alloc] initWithProgressViewStyle:UIProgressViewStyleDefault];
float someFloat = 0;

NSTimer *myTimer = [NSTimer scheduledTimerWithTimeInterval:300 target:self selector:@selector(methodToUpdateProgress) userInfo:nil repeats:YES];

次に、これにより進行状況ビューが更新されます(最小/最大値が0〜100であると仮定)

- (void)methodToUpdateProgress
{
    if(someFloat == 100){
         [myTimer invalidate];
    }else{
         someFloat = someFloat + 12;
         [myProgressView setProgress:someFloat animated:YES];
    }
}

さらに、これが呼び出される時間が実際に懸念される場合は、この例が大いに役立つはずです。引用元: NSTimer を使用するにはどうすればよいですか?

NSDate *d = [NSDate dateWithTimeIntervalSinceNow: 60.0];
NSTimer *t = [[NSTimer alloc] initWithFireDate: d
                              interval: 1
                              target: self
                              selector:@selector(onTick:)
                              userInfo:nil repeats:YES];

NSRunLoop *runner = [NSRunLoop currentRunLoop];
[runner addTimer:t forMode: NSDefaultRunLoopMode];
[t release];

注:これはかなり大まかな例ですが、要点は理解できるはずです。お役に立てれば!

于 2012-08-23T08:00:12.640 に答える
0

iVar:

NSDate *_startDate = ....
NSDate *_finishDate = ....
UIProgressBarView *_progressBar = ....

トリガー方法:

- (void)start
{
   [self updateProgressBar];
   NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:updateInterval 
                                                     target:self 
                                                     selector:@selector(updateProgressBar) 
                                                     userInfo:nil 
                                                     repeats:YES];
}

プログレスバービューを更新

- (void)updateProgressBar
{
     NSTimeInterval diff = [_finishDate timeintervalSince:_startDate];
     NSTimeInterval pastTime = [_finishDate timeIntervallSinceNow];
     [_progressBar setProgress:pastTime/diff animated:YES];

}

終了時と dealloc メソッドでは、タイマーを無効にすることを忘れないでください。

終了日と開始日をコードの別の場所に保存する場合。その後、割り当てが解除されても同じ状態でビューを再作成できます。これは、ユーザーがそのビューを 1 時間開く必要がないことを意味します。例えば。彼/彼女は30分後に閉じて開きます。

于 2012-08-23T08:08:01.983 に答える