2012-02-03 39 views
1

即使在主線程被阻塞的情況下,AVCaptureVideoPreviewLayer的實例仍會從視頻捕捉流中更新其內容。是否有可能通常使用CALayer的自定義子類複製此行爲?換句話說,在原始圖像數據的情況下,當主線程被阻塞時,我們能夠更新屏幕上顯示的內容嗎?如何在主線程被阻塞時更新CALayer的內容?

+0

CATiledLayer被設計爲在後臺線程中工作。 – 2012-02-03 20:30:07

+1

不完全。它將圖像切片加載到後臺線程上,但仍將其繪製在主線程上。 – 2012-02-03 20:38:58

回答

3

當主線程被阻塞時,您無法更新視圖中的任何內容。整個UIKit是單線程的,並在主事件循環中運行。視頻捕捉是一種特殊情況,因爲它直接繪製到屏幕緩衝區,但您無法自己複製它。此外,如果您在主線程上執行長時間運行的任務,則iOS會假設您的應用程序崩潰並在幾秒鐘後終止它。

爲什麼不在後臺線程上執行其他任務呢?這是標準做法。

+0

+1很好的答案。 – Till 2012-02-03 21:27:49

+0

我討厭它,當它可以做某事,但蘋果有意限制它......謝謝你的答案 - 我需要知道的一切。 – Anton 2012-02-03 22:42:58

+0

我不確定這是一個例子 - 多線程的用戶界面很難做,很少有操作系統 - 但很高興答案幫助! – 2012-02-04 00:16:36

0

我找到了更新非UI線程上的UI的方法。 我們可以在任何線程中執行代碼,並且即使在主線程正在休眠時,它實際上也會更改圖層的轉換。

self.labelLayer.transform = CATransform3DMakeScale(1.2, 1.2, 1.0); 

所以,如果任何人都可以解釋這一點,請隨時連接我!

相關問題