2013-10-24 15 views
24

-renderInContext:自從它的出現以來一直被廣泛使用,但由於不可能呈現OpenGL圖層,AVPreviewLayer(可能是因爲是一種OpenGL圖層),我仍然無法正確呈現CATiledLayer。
隨着iOS7被引入了2個新的API來獲取屏幕截圖,其中一個是-snapshotViewAfterScreenUpdates:,返回一個特定的視圖(_UIReplicantView)和-drawViewHierarchyInRect:afterScreenUpdates:最後一個是-renderInContext的一種替代品,不幸的是它似乎有相同的限制。
-snapshotViewAfterScreenUpdates:它似乎也適用於OpenGL和AVPreviewLayer,不幸的是,如果你想做特定的動畫或者使用內容作爲背景(比如一個uibutton),那麼這樣的視圖並不是非常有用。我試圖從返回的視圖中獲取內容,但我仍然沒有運氣。
有人試過了嗎?_UIReplicantView和snapshotViewAfterScreen更新如何獲取其內容?

+1

但是,你想要做什麼與視圖,返回'snapshotViewAfterScreenUpdates'?你可以從該視圖生成UIImage並使用它,但是你不能訪問底層圖層的內容。 – gabuh

+0

你有沒有試過從_UIReplicantView中獲取UIImage?至少在iOS7上返回一個空白圖像 – Andrea

+0

我不在代碼前面,所以我會檢查我什麼時候到家。我有一個遊戲,我想我正在使用其中一種方法來獲取屏幕截圖。我不記得究竟是哪一個。 (我在遊戲中渲染一個OpenGL圖層,並且截圖工作正常),我會稍後檢查並再次發佈。 – gabuh

回答

1

我一直在努力解決這個問題,最初我們通過掛鉤到NSRunLoop並渲染圖像然後將它們合併在一起來解決它。這真是太麻煩了。

然後我們發現了一段看起來可以解決這個問題的代碼,但是您必須準備好在盒子外面思考一下。

該框架記錄了一個UIWindow的視頻,然後我們只是停止記錄。通過一個AVAssetImageGenerator(或類似的東西),並抓取圖像。

正如我所說這是一個非常奇怪的方式來解決它,但它似乎對我們工作正常。

(ASScreenRecorder)的代碼可以在此庫中找到。

https://github.com/alskipp/ASScreenRecorder

我們的一個菜單的在我們的產品是OpenGL和一些有視頻的背景!這對我們來說非常合適。但是我不能確定這是否是我們實現和使用OpenGL的特殊情況。儘管作爲他的示例視頻節目,它絕對適用於攝像機視圖。

+0

它似乎真的是一個很多,但如果它的工作..我會研究, – Andrea

+0

嗨,你能夠從UIReplicantView?我有同樣的問題。我曾嘗試過使用ASScreenRecorder,但它顯示的是視頻播放的黑色區域,在視圖上顯示其餘部分。 –