2010-12-01 12 views
0

我想發佈一條消息和圖片到twitter(使用圖片主機)。如果用戶單獨輸入消息,然後點擊發送,我的覆蓋圖出現並顯示「發送消息給Twitter」。 如果用戶添加圖片,則不會顯示疊加。也許是因爲他必須將它轉換爲JPG格式,並且這是沉重的負載? 我的代碼如下所示:iPhone:當我做一些沉重的事情後,屏幕不會重畫_afterwards_

[overlayMessage changeTextTo:NSLocalizedString(@"keySendTwitter", nil)]; 
overlayMessage.hidden = NO; 
overlayMessage.locked = YES; 

// I've added these out of desperation :P 
[overlayMessage setNeedsDisplay]; 
[self.view setNeedsDisplay]; 

[self sendMessage]; 

這似乎是兩個消息(changeTextTo:和:)的sendMessage在並行運行,並且是的sendMessage用做重載快一點點。但這需要線程化,而我的應用程序不是多線程的。

或者可能setNeedsDisplay:在重載之前更新屏幕的錯誤信息?

回答

1

不是100%清楚你在做什麼,但它聽起來像你的[self sendMessage]方法阻止用戶界面更新。如果您正在進行大型同步網絡操作或圖像轉換,這是有道理的。您不必在線程繁瑣的情況下讓UI在繁重的操作中響應。只需撥打sendMessage在不同的線程有:

[self [email protected](sendMessage) withObject:nil afterDelay:0.001f]; 

[self performSelectorInBackground:@selector(sendMessage) withObject:nil]; 

你的方法將結束,您的UI將更新(不需要setNeedsDisplay,可能)和你的sendMessage選擇將閃光。你負責確保sendMessage導致你的加載屏幕被解僱,但你會想到的東西:)

這裏的關鍵想法是,接口更新成批發生。你的代碼有點運行,然後界面更新...你的代碼的另一部分運行,界面更新。

這裏發生的事情是,你的代碼太笨重了,並且在完成之前ui無法更新。調用setNeedsDisplay僅將視圖標記爲「髒」並且需要重繪,但實際上並未重新繪製視圖。

我建議將您的操作分爲異步塊,使用NSOperationQueue或使用其中一個performSelector變體。

+0

我知道performSelector。但sendMessage中的代碼來自ShareKit。它沒有考慮到智能線程:P – david 2010-12-01 11:03:02

相關問題