2013-10-24 14 views
24

-renderInContext: è stato ampiamente utilizzato dal suo aspetto, ma con esso è impossibile eseguire il rendering del livello OpenGL, AVPreviewLayer (probabilmente perché è una sorta di strato OpenGL) e non è stato ancora possibile eseguire correttamente il rendering di un CATiledLayer.
Con iOS7 sono state introdotte 2 nuove API per ottenere schermate, una è -snapshotViewAfterScreenUpdates: che restituisce una vista particolare (_UIReplicantView) e -drawViewHierarchyInRect:afterScreenUpdates: l'ultima è una sorta di sostituzione per -renderInContext, sfortunatamente sembra che abbia gli stessi limiti.
The -snapshotViewAfterScreenUpdates: sembra funzionare anche con OpenGL e AVPreviewLayer, sfortunatamente una vista del genere non è molto utile se si vogliono fare particolari animazioni o usare il contenuto come sfondo di qualcosa (come un Uibutton). Ho provato a togliere il contenuto dalla vista restituita, ma non ho ancora avuto fortuna.
Qualcuno ha ancora provato?_UIReplicantView e snapshotViewAfterScreenAggiorna come ottenere il suo contenuto?

+1

Ma cosa stai cercando di fare con la vista che restituisce 'snapshotViewAfterScreenUpdates'? puoi generare una UIImage da quella vista e usarla, ma non puoi accedere ai 'contenuti' del livello sottostante – gabuh

+0

Hai mai provato a ottenere una UIImage da una _UIReplicantView? Almeno su iOS7 restituisce un'immagine vuota – Andrea

+0

Non sono di fronte al codice, quindi controllerò quando arrivo a casa .. Ho un gioco e penso di usare uno di questi metodi per ottenere uno screenshot. Non ricordo esattamente quale. (Sto facendo il rendering di uno strato OpenGL nel gioco e lo screenshot funziona) Verificherò in seguito e pubblicherò di nuovo. – gabuh

risposta

1

Ho affrontato esattamente questo problema, inizialmente abbiamo lavorato attorno ad esso collegando NSRunLoop e convertendo in un'immagine e quindi unendole. E 'stato davvero disordinato.

Poi abbiamo trovato un pezzo di codice che sembra risolvere questo problema, ma devi essere preparato a pensare fuori dagli schemi un po '.

Quella struttura registra un video di una UIWindow, in quel momento stavamo semplicemente fermando il record. Spingendolo attraverso un AVAssetImageGenerator (o qualcosa del genere), e afferrando l'immagine.

Come ho detto è un modo strano per risolverlo, ma sembra funzionare bene per noi.

Il codice per (ASScreenRecorder) può essere trovato in questa libreria qui.

https://github.com/alskipp/ASScreenRecorder

Uno del nostro menu di nel nostro prodotto era OpenGL e alcuni avevano sfondi video! E questo ha funzionato perfettamente per noi. Ma non posso essere sicuro se fosse qualcosa di particolare per la nostra implementazione e l'uso di OpenGL. Sicuramente funziona anche per le visualizzazioni della videocamera, come il suo spettacolo di video di esempio.

+0

Sembra davvero un molto ma se funziona .. guarderò in quel – Andrea

+0

Ciao eravate in grado di ottenere Immagine da UIReplicantView ?? Sto avendo lo stesso problema. Ho provato ASScreenRecorder sta bene, ma sta mostrando un'area nera in cui il video è in riproduzione, resto tutto a vista mostra. –

Problemi correlati