2015-01-15 37 views
0

我創建了一個UIViewController,其中包含一些RosyWriter的功能,我正在重新創建一個錄像機。屏幕包含一個標題,一個包含AVCaptureVideoPreviewLayer的剪輯到邊界的子視圖(因此視頻內容的子層CALayer被添加到該子視圖中,所以我認爲它是非常深的嵌套),兩個按鈕的作用類似於切換按鈕 - 以放置在UIViewController的Storyboard中的Start和Stop按鈕的形式。UIView子視圖可視化更新,但在以前的狀態下進行交互

即使視頻的預覽圖層顯示在屏幕上並顯示相機,「開始」按鈕也可以正常工作。但是,當我開始錄製時,我會切換按鈕,使「開始」按鈕隱藏,「停止」按鈕隱藏= false。

開始按鈕的工作原理 - 當視頻預覽在屏幕上並正在更新時按下,但實際錄製(抓取緩衝區中的樣本並將其寫入文件 - 儘管我可以看到,UIKit沒有任何關係)沒有開始。

當視頻錄製處於活動狀態時,顯示「停止」按鈕並且「開始」按鈕處於隱藏狀態,可見的停止按鈕不可按下,但仍可按下隱藏的開始按鈕。

我試着移動包含視頻的UIView上方的Stop按鈕,以防CALayer或其他東西拉伸與剪裁的UIView邊界。這沒有幫助。停止按鈕總是表現得好像沒有啓用 - 但它已啓用,並且沒有任何東西看起來與按鈕重疊。該按鈕工作正常,如果包含視頻的UIView(我將重申,它低於破損的按鈕)從不顯示。

誰能想到爲什麼會發生這種情況?我立即想到了setNeedsLayout和setNeedsDisplay,並嘗試將其中的一些內容拋出,因爲它幾乎就像視圖更新了我的隱藏或顯示按鈕的請求,但交互層沒有更新。

感謝

回答

0

我現在覺得這是因爲我的調度隊列的無知使用(或誤用)。我仍然不確定我是如何與未顯示的按鈕進行交互的 - 可能是因爲它們自己的狀態更改會立即發生響應,而其餘部分無法在主隊列中發生(視覺刷新, 例如)。

所以我解決了這個問題,從某種意義上說,強制在主隊列上調用特定的異步委託方法。這不會影響我在錄製過程中執行此特定步驟的操作。

相關問題