2013-04-07 17 views
5

Sto costruendo un'app in cui devo prendere uno screenshot di una vista le cui sottoview sono sessioni di telecamere (sessioni di AVFoundation). Ho provato questo codice:Scatta uno screenshot di un UIView in cui le sue sottoview sono sessioni di telecamere

CGRect rect = [self.containerView bounds]; 
UIGraphicsBeginImageContextWithOptions(rect.size,YES,0.0f); 
CGContextRef context = UIGraphicsGetCurrentContext(); 
[self.containerView.layer renderInContext:context]; 
UIImage *capturedImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

Il che mi fa effettivamente un'UIImage con il punto di vista, solo che le sessioni della fotocamera sono neri:

enter image description here

Ho provato il metodo privato UIGetScreenImage() e funziona perfettamente, ma come Apple non lo consente, non posso usarlo. Ho anche provato quello in Apple's docs ma è lo stesso. Ho tracciato il problema alle sessioni di AVFoundation usando i livelli. Come posso raggiungere questo obiettivo? L'app ha una vista container con due viste che interrompono le sessioni della videocamera.

+0

Ho anche avuto questo problema un po 'di tempo fa. Il problema era che il livello di anteprima della fotocamera (così come alcuni livelli di rendering personalizzati) utilizzava OpenGL. Il metodo che stai usando non funziona con i layer backed GL come ricordo. Chiederò in giro e vedrò se è vero. –

+0

@SteveMcFarlin hai trovato un modo per risolvere il problema, sto affrontando lo stesso problema http://stackoverflow.com/questions/41239254/take-screenshot-during-video-call-screenshot-for-uiview-with-camera -session-sub – Chlebta

+0

Hai trovato soluzioni? – Chlebta

risposta

2

Se si utilizza iOS 7, è abbastanza semplice e si potrebbe fare qualcosa del genere da un UIViewController:

UIView *snapshotView = [self.view snapshotViewAfterScreenUpdates:YES]; 

È inoltre possibile utilizzare questo link da una vedova: iOS: what's the fastest, most performant way to make a screenshot programatically?

Per iOS 6 e versioni precedenti , sono riuscito a trovare solo le seguenti Mela tecnico D & A: How do I take a screenshot of my app that contains both UIKit and Camera elements?

  1. cattura il contenuto della telecamera. (Explained here)
  2. Disegna tu stesso il contenuto della videocamera catturato nel contesto grafico che stai rendendo i tuoi elementi UIKit. (Simile a quello che hai fatto nel tuo codice)
+0

Sono confuso perché questa soluzione non sembra funzionare ma è stata scelta. Ho provato tutti i tipi di variazioni di questo metodo ma senza fortuna. È ancora tutto nero. Funzionava davvero? – Vlad

+0

@Vlad Ho provato e non funziona, hai trovato una soluzione? – Chlebta

0

Anche io attualmente sto cercando una soluzione a questo problema!

Sono attualmente fuori al momento quindi non posso provare quello che ho trovato, ma dare un'occhiata a questi link:

Screenshots-A Legal Way To Get Screenshots sembra che la sua sulla strada giusta - ecco la Example Project (e here è il post iniziale)

Quando riesco a farlo funzionare aggiornerò sicuramente questa risposta!

+0

Anch'io ho visto quei post, ma non sono riuscito a implementarlo:/ – pmerino