我有这段代码:
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.不确定为什么会出错。
答案 0 :(得分:2)
您应该将一些代码放入后台线程,并通知进度更改驱动UI的主线程。
这里你没有给runloop任何机会至少运行一次,所以很可能主线程忙于编写文件,没有时间更新进度条可能不止一次。
将步骤分为由NSOperation
驱动的一系列NSOperationQueue
s。这将为用户提供更顺畅的体验。
答案 1 :(得分:1)
要使进度条正确更新,您需要在后台线程上执行长时间运行的操作,并在主线程上更新进度。这意味着使用异步调度队列或detachNewThreadSelector:toTarget:withObject:,然后将任何进度回发给主线程。