gpt4 book ai didi

ios - uiprogressview 没有在视觉上完成到 100%

转载 作者:行者123 更新时间:2023-11-29 10:49:35 25 4
gpt4 key购买 nike

我不明白这里发生了什么。我有一个进度条快要完成了,但没有显示出来。如果我按 .10 递增,它会在 .9 左右停止,看起来很直观,我可以想出如何修复它。

    float total = self.forms.count;

float calc = (float)self.progView.progress + (1 / total);
self.progView.progress = calc;
if (self.progView.progress == 1 )
{

sleep(2);
self.progView.hidden = YES;
self.progView.progress = 0;
}

我知道它会进入 if 语句,因为它会像这样休眠 2 秒 enter image description here

编辑:

嗯,我删除了最后两行,它似乎确实更新了最后一部分,这一定是我拥有的 block 的问题,它是从中调用的吗?

即使这个方法包含在 dispatch_async(dispatch_get_main_queue() 中,我仍然有问题。

主线程 sleep 不好:

这是我的新工作代码:

if (self.progView.progress == 1 )
{
[NSTimer scheduledTimerWithTimeInterval:.5 target:self selector:@selector(removeProg) userInfo:nil repeats:NO];
}

方法

-(void)removeProg
{
self.progView.hidden = YES;
self.progView.progress = 0;
}

最佳答案

这一切都与 iOS 中的绘图工作方式有关。当你要求它时它不会发生。它发生在以后!只有我们到了“重绘时刻”,界面才会更新。这只会在您的所有代码停止运行后发生。在此之前,所有更新界面的命令都是没有意义的。当“重绘时刻”到来时,将执行所有累积的更新界面的命令。如果多个累积命令影响界面的相同功能,则仅最后一个有效。

那么让我们检查一下您的代码:

self.progView.progress = calc;
if (self.progView.progress == 1 )
{
sleep(2);
self.progView.hidden = YES;
self.progView.progress = 0;
}

假设进度 为 .9。现在您将 progress 设置为 calc,假设 calc 为 1。但是还没有重绘时刻,因此界面没有改变。我们仍然看到温度计为 0.9。您的代码继续运行,并将 progress 设置为 0。现在您的代码结束了。 现在是重绘时刻。因此,温度计从 0.9 跳到 0,但从未显示为 1。

一个简单的平行实验是这样的:

myView.backgroundColor = [UIColor greenColor];
sleep(2);
myView.backgroundColor = [UIColor redColor];

你永远不会看到 View 变成绿色,因为当重绘时刻到来时,最后的命令是让它变成红色,所以这就是出现的样子。

从技术上讲,当运行时向您发送一个启动您的代码运行的事件时,一个 CATransaction 就开始了。当您的所有代码运行完毕且运行时的原始事件完成时,CATransaction 被“提交”,我们将进行一系列清理工作。这包括完成所有累积绘图以及启动任何请求的动画。

关于ios - uiprogressview 没有在视觉上完成到 100%,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21035607/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com