Ios 简单的NSTimer进度条7秒

Ios 简单的NSTimer进度条7秒,ios,nstimer,progress,Ios,Nstimer,Progress,理论上,这个进度条应该持续7秒,但它似乎有点长。我的数学一定不正确,否则我就忽略了什么 计时器应在1秒内触发100次,进度条应比达到1.0的时间长约7倍 任何帮助都将不胜感激 - (void)startTimer; { [pBar showProgress:self.progress]; [self.timer invalidate]; self.timer = nil; if (self.progress < 1.0) { CGFloa

理论上,这个进度条应该持续7秒,但它似乎有点长。我的数学一定不正确,否则我就忽略了什么

计时器应在1秒内触发100次,进度条应比达到1.0的时间长约7倍

任何帮助都将不胜感激

- (void)startTimer;
{
    [pBar showProgress:self.progress];

    [self.timer invalidate];
    self.timer = nil;

    if (self.progress < 1.0) {
        CGFloat step = 0.01;
        self.timer = [NSTimer scheduledTimerWithTimeInterval:step target:self
                                                selector:@selector(startTimer)
                                                userInfo:nil repeats:NO];
        self.progress = self.progress + 0.00143;
    } else {
        [self performSelector:@selector(stopProgress)
               withObject:nil afterDelay:0.5];
    }
}
-(void)startTimer;
{
[pBar showProgress:self.progress];
[自动定时器失效];
self.timer=nil;
如果(自我进步<1.0){
CGFloat阶跃=0.01;
self.timer=[NSTimer scheduledTimerWithTimeInterval:步骤目标:self
选择器:@selector(startTimer)
userInfo:nil repeats:NO];
self.progress=self.progress+0.00143;
}否则{
[自执行选择器:@选择器(stopProgress)
withObject:零延时:0.5];
}
}

您不应该像现在这样经常更新。每秒100次太频繁了。理论上,60将足以实现良好的帧速率。但是,UIProgressBar可以使用动画更新其值。因此,您只需要总共更新70次或每秒更新10次,然后使用动画进行更改

我会选择10个或更少的动画更新。或者,您可以尝试使用一个动画进行更新:

[UIView animateWithDuration:7.0 animations:^{
    [progressView setProgress:1.0 animated:YES]; //maybe try animated: NO here
} completion:^(BOOL finished) {
    //ended
}];

虽然我没有测试这种方法,但它似乎比手动执行基本上是进度计时动画的操作要干净得多。

您不应该像现在这样经常更新。每秒100次太频繁了。理论上,60将足以实现良好的帧速率。但是,UIProgressBar可以使用动画更新其值。因此,您只需要总共更新70次或每秒更新10次,然后使用动画进行更改

我会选择10个或更少的动画更新。或者,您可以尝试使用一个动画进行更新:

[UIView animateWithDuration:7.0 animations:^{
    [progressView setProgress:1.0 animated:YES]; //maybe try animated: NO here
} completion:^(BOOL finished) {
    //ended
}];

虽然我没有测试这种方法,但它似乎比手动执行基本上是进度计时动画的操作要干净得多。

如果
重复
,您想做的是
。您正在比较两个小数点后6位的浮点值,这通常会导致不正确的比较。StartTimer在做什么?有点长的是什么?您如何验证它?还有,你想完成什么?在每次迭代中,您都会以固定的数量增加进度,理论上,在700次迭代之后,它应该完成,但计划一个计时器并不需要0个时间。在
中,如果
重复
,您要做的是
。您正在比较两个小数点后6位的浮点值,这通常会导致不正确的比较。StartTimer在做什么?有点长的是什么?您如何验证它?还有,你想完成什么?你每次迭代都会以固定的数量增加进度,理论上,700次迭代后,它应该完成,但计划计时器不需要0个时间。你最终使用动画了吗:是吗?是的,我最终会以动画的形式实现它,我使用的是自定义进度条,没有考虑额外的时间来安排计时器。您是否最终使用了动画:是的?是的,我将以动画的形式实现它,我使用的是自定义进度条,没有考虑额外的时间来安排计时器。