0

根據文檔[UIActivityItemProvider item]在輔助線程上運行。這對於不鎖定用戶界面非常有用,但我發現它並不總是在顯示item時完成,例如在郵件撰寫屏幕中。如何確保UIActivityViewController呈現時UIActivityItemProvider的項目已準備就緒?

我正在生成一個UIImage並將其保存到磁盤,以返回一個NSURL。在較長時間運行的圖像生成任務中,它在呈現給用戶時是不完整的。我試圖強制它進入主線程,但它仍然發生。

我怎樣才能確保item是完整的?

回答

1

這可以通過使用布爾值來保存項目的返回,直到文件的構建完成。如果要顯示進度或在主視圖上顯示活動指示符,可以通過從主線程調用它來完成此操作。以下是此操作的代碼片段:

使用此功能在您的提供程序中設置活動視圖控制器以加載進度視圖。

self.parentViewController = parentVc; 

這是帶阻塞和反饋視圖加載的項目功能。

self.wait = true; 

[self prepareFile:^(){ 
    [self performSelectorOnMainThread:@selector(dismissProgressView) 
            withObject:nil waitUntilDone:NO]; 
}]; 

[self performSelectorOnMainThread:@selector(loadProgressView) 
            withObject:nil waitUntilDone:NO]; 

while (self.wait) { 
    [self performSelectorOnMainThread:@selector(updateProgressView) 
             withObject:nil waitUntilDone:NO]; 
} 

return self.completedUrl; 

然後,您可以創建在主線程上調用的三個函數來顯示進度視圖,在等待文件完成時更新進度視圖。在dismissProgressView函數的實現中,確保在dismissViewController完成時將wait布爾值設置爲false。

相關問題