Ios4 自iOS 5之后,setProgress不再更新UIProgressView
自从iOS 5问世以来,我在进度条方面遇到了一些问题。下面的代码在iOS 5之前运行良好,但在iOS 5中,进度条不再显示循环中设置的新进度 代码的工作原理如下:Ios4 自iOS 5之后,setProgress不再更新UIProgressView,ios4,ios5,nsnumber,uiprogressview,Ios4,Ios5,Nsnumber,Uiprogressview,自从iOS 5问世以来,我在进度条方面遇到了一些问题。下面的代码在iOS 5之前运行良好,但在iOS 5中,进度条不再显示循环中设置的新进度 代码的工作原理如下: 创建进度条(工作) 在新的后台进程中:将初始进度设置为0.25(工作) 在相同的后台过程中:在循环过程中更新进度(在iOS 4中工作) 以下是bar init的代码: // create a progress bar UIProgressView *progressBar = [[UIProgressView alloc] initW
// create a progress bar
UIProgressView *progressBar = [[UIProgressView alloc] initWithFrame:CGRectMake(coverSizeX*0.25, coverSizeY - 34.0, coverSizeX*0.5, 9.0)];
progressBar.progress = 0.0;
progressBar.progressViewStyle = UIProgressViewStyleBar;
在另一个线程中,它将进度的起点设置为0.25:
// set an initial progress
[progressBar setProgress: 0.25];
稍后,它将更新循环中的进度,以显示下载进度:
// within a for-loop:
NSNumber *counterPercentage;
for ( pageDownload = 1; pageDownload < pagesToDownload; pageDownload++ ) {
counterPercentage = [[NSNumber alloc] initWithFloat: (float)pageDownload / (float)((float)pagesToDownload)];
[progressBar setProgress: [counterPercentage floatValue]];
[progressBar performSelectorOnMainThread:@selector(setNeedsDisplay) withObject:nil waitUntilDone:YES];
}
//在for循环中:
NSNumber*对应百分比;
用于(pageDownload=1;pageDownload
…但进度未显示在屏幕上,进度条停留在初始设置的0.25进度
iOS 5版本是否有任何可能破坏它的变化?自从iOS 5切换以来,我看到了很多类似这样的问题,我不确定为什么只有iOS 5才会出现问题。但主要是因为我不确定为什么以前没有问题 在代码中调用
[progressBar setProgress:[counterPercentage floatValue]]代码>来自后台线程。这是一个UI调用,不应该从后台线程进行。您还可以调用setNeedsDisplay
,这对于更新progressBar
是不必要的,因为UIProgressView
知道如何显示自己。iOS 5似乎对更新用户界面的要求更加严格,但仅限于最佳实践
在我看来,这似乎是块的完美用途。使用for循环的块可以这样编写:
for ( pageDownload = 1; pageDownload < pagesToDownload; pageDownload++ ) {
// Other stuff in background
dispatch_async(dispatch_get_main_queue(), ^{
progressBar.progress = ((float)pageDownload/(float)pagesToDownload);
});
// Other stuff in backgroud
}
for(pageDownload=1;pageDownload
它在iOS 5中确实有效,最简单的方法是:
.h文件:
IBOutlet UIProgressView *WhateverYouWantToCallIt;
.m文件:
[WhateverYouWantToCallIt setProgress:(float) 0.3];
如果上面写着0.3,你可以把任何你喜欢的值(在0到1之间)谢谢你,这很有效!另外,感谢您的解释,不仅仅是提供一个可行的解决方案:-)@user1791131它在iOS 5中不起作用。主要问题是,他正在从主线程以外的线程进行UI更改。从非主线程的任何线程对UI所做的任何更改都不会发布。