2010-08-24 55 views
0

我加載在NSImage中一個非常大的文件,使用此代碼:NSImage中initWithContentsOfFile:顯示進度

[[NSImage alloc] initWithContentsOfFile:aFile] 

此操作需要幾分鐘的時間。我想在我的用戶界面上顯示加載狀態。 如何讀取或計算進程?

謝謝。

+0

你知道瓶頸是什麼嗎? - 解碼數據,或從磁盤讀取數據。如果後者可以嘗試加載爲NSData,並顯示進度。 – 2010-08-24 14:36:13

回答

1

初始化圖像by referencing the file,該圖像不會立即加載。然後,將自己設置爲圖像的代表,並響應the NSImageDelegate protocol的增量加載消息。然後,嘗試向圖像詢問關於自身的某些信息(請求其表示可能是一種好方法),以使圖像開始加載。

儘管如此,我認爲這仍然會阻止您的用戶界面:您將能夠顯示進度,但不能讓用戶在圖像加載時處理其他事情。我不確定你會怎麼做。

+0

將加載過程打包在單獨的線程中是不可能的?該線程可能隨時發佈通知,通知其應用程序可能會反應並更新其他UI元素的進度。完成加載後,將圖像對象添加到視圖堆棧。 只要NSImage對象不是視圖堆棧和主線程的一部分,我不知道它爲什麼會阻塞任何東西。 – Toastor 2010-08-24 11:32:47

+0

我希望'表示法(或其他)消息阻塞,直到圖像完全加載,這是最早它將有完整的值返回。你說得對,你可以通過一個線程來完成,但是我不能動搖其他API(可能是CGImageSource?)的模糊感覺,它可以讓你異步加載鏡像,而不會自己產生線程。 – 2010-08-24 13:09:59

+0

我已經測試了這個想法,但是我的代表從來沒有打過電話。 這很奇怪。 – Pixman 2010-08-24 14:25:47