我使用GCD從服務器下載圖像並更新UILabel上的處理,然後將標籤打印到屏幕上(例如:將打印到屏幕上:「下載:3/15圖片「)如何在IOS下使用GCD下載圖像時更新標籤文本
但是在開始時標籤是:」下載:0/15圖像「。然後當它完成下載時,標籤是「下載:15/15圖像」。用戶不能看到下載處理。
我想要的是用戶可以看到如下處理: 「下載:1/15圖像」,「下載:2/15圖像」。「下載:3/15圖像」,...,「下載: 15/15圖像「。
這是我的代碼:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
//Here your non-main thread.
NSString *text;
for (int i = 0;i<[self.pageImages count];i++){
NSString *image = [self.pageImages objectAtIndex:i];
[dataManage downloadImagesFromUrl: image ];
text = [NSString stringWithFormat:@「Downloading %d/%d」,i,self.pageImages.count];
}
dispatch_async(dispatch_get_main_queue(), ^{
//Here you returns to main thread.
[downloadLabel setText:text];
});
});
你必須寫循環內的代碼的setText。 – borncrazy
我在循環中設置文本,但它只是打印:「」下載:1/15圖像「,沒有別的。我讀他們提到,我們必須更新主線程中的用戶界面,但是當我NSlog」文本「它將打印出我想要的結果 – tommy
我遇到了幾乎完全相同的問題,我最終做的是不使用「for」循環,而是使用NSTimer,並將事件間隔爲0.5秒。更新顯示在您的標籤 –