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