假设我有一个大小为(394,129,328,9)的UIProgressBar,我用
增加了高度CGAffineTransform transform = CGAffineTransformMakeScale(1.0f, 3.0f);
PgView.transform = transform;
我需要实现的是:如果我有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{
}
}
它有效。但是我想动态地实现进度和时间间隔?有什么想法??
提前致谢。
答案 0 :(得分:7)
很难理解你的意图。正如我想的那样,只有在新值可用而不是使用固定的计时器间隔进行更新时才需要更新进度条。
这将导致简单的答案:每当您更改“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];
}
现在,仍然使用一个计时器来演示调用'updateReceivedData',它只增加'receivedData'并调用'updateProgressBar'。如您所见,'updateReceivedData'不会线性增加,仅用于演示。如果'updateReceivedData'将根据需要而不是定时器调用,那么进度条也将按需更新。现在只是一个关于如何以及何时更新receivedData的问题。这不是关于进度条的问题。