Sar*_*rah 0 objective-c nstimer uiprogressview
假设我有一个大小为(394,129,328,9)的UIProgressBar,我增加了高度
CGAffineTransform transform = CGAffineTransformMakeScale(1.0f, 3.0f);
PgView.transform = transform;
Run Code Online (Sandbox Code Playgroud)
我需要实现的是:如果我有5分钟的时间,progressView应填充一定数量,并在5分钟结束时完全填充.同样1分30分钟.
我这样实现:
-(void)viewWillAppear:(BOOL)animated
{
CGAffineTransform transform = CGAffineTransformMakeScale(1.0f, 3.0f);
PgView.transform = transform;
recievedData = 0.01;
xpectedTotalSize = 1.0;
PgView.progress = 0.0;
[self performSelectorOnMainThread:@selector(makeMyProgressBarMoving) withObject:nil waitUntilDone:NO];
}
- (void)makeMyProgressBarMoving
{
float actual = [PgView progress];
if (actual < 1)
{
PgView.progress = actual + ((float)recievedData/(float)xpectedTotalSize);
[NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(makeMyProgressBarMoving) userInfo:nil repeats:NO];
}
else{
}
}
Run Code Online (Sandbox Code Playgroud)
它有效.但是我想动态地实现进度和时间间隔?任何的想法??
提前致谢.
很难理解你的意图.正如我想的那样,只有在新值可用时才更新进度条,而不是使用固定的计时器间隔进行更新.
这将导致简单的答案:每当您更改"recievedData"的值时,都会更新进度条.因此,'makeMyProgressBarMoving'方法不需要计时器.此外,您不需要记住"实际"值.您可以直接将"receivedData/xpectedTotalSize"分配给进度条.
- (void) updateProgressBar
{
PgView.progress = ((float)receivedData/(float)xpectedTotalSize);
}
- (void) updateReceivedData
{
if (receivedData < 20)
receivedData += 1.0;
else
receivedData += 10.0;
[self updateProgressBar];
}
-(void)viewWillAppear:(BOOL)animated
{
receivedData = 0.0;
xpectedTotalSize = 100.0;
[NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(updateReceivedData) userInfo:nil repeats:YES];
}
Run Code Online (Sandbox Code Playgroud)
现在,仍然使用一个计时器来演示调用'updateReceivedData',它只增加'receivedData'并调用'updateProgressBar'.如您所见,'updateReceivedData'不会线性增加,仅用于演示.如果'updateReceivedData'将根据需要而不是定时器调用,那么进度条也将按需更新.现在只是一个关于如何以及何时更新receivedData的问题.这不是关于进度条的问题.
| 归档时间: |
|
| 查看次数: |
4525 次 |
| 最近记录: |