进度条不会经常更新

时间:2011-08-08 22:02:39

标签: iphone objective-c

我有这段代码:

UIImage *resizedImage = [MediaSource resizeImage:image];
    progressBar.progress = 0.2;
    NSString *filePath = [MediaSource writeImageToFile:resizedImage];
    progressBar.progress = 0.5;
    NSString *fullImagePath = [MediaSource writeImageToFile:image];
    progressBar.progress = 0.8;
    UIImage *thumbnail = [MediaSource createThumbnailForMediaType:@"Image" WithImage:image];
    progressBar.progress = 0.9;
    NSString *thumbnailPath = [MediaSource writeImageToFile:thumbnail];
    progressBar.progress = 1.0;

尽管writeImageToFile占用了一秒或更多,但进度条永远不会更新中间的值,只给出0.2然后最终为1.0。我怎样才能让它显示出来的所有价值?

编辑:注释掉第一个进度更新会使其保持为0.不确定为什么会出错。

2 个答案:

答案 0 :(得分:2)

您应该将一些代码放入后台线程,并通知进度更改驱动UI的主线程。

这里你没有给runloop任何机会至少运行一次,所以很可能主线程忙于编写文件,没有时间更新进度条可能不止一次。

将步骤分为由NSOperation驱动的一系列NSOperationQueue s。这将为用户提供更顺畅的体验。

答案 1 :(得分:1)

要使进度条正确更新,您需要在后台线程上执行长时间运行的操作,并在主线程上更新进度。这意味着使用异步调度队列或detachNewThreadSelector:toTarget:withObject:,然后将任何进度回发给主线程。