La mia squadra sta sviluppando un set di SDK per , ID scanning e OCR. Utilizziamo la fotocamera del dispositivo, in particolare, AVCaptureSession
, per ottenere fotogrammi video su cui eseguiamo la nostra elaborazione.Come utilizzare AVCaptureSession con Slide Over e Split View in iOS 9?
Stiamo esplorando le nuove funzionalità di multitasking di iOS 9 Slide Over e Split View.
di Apple suggerisce di opting out di queste caratteristiche per le applicazioni della fotocamera-centrica, in cui utilizzando l'intero schermo per l'anteprima e catturare un momento in fretta è una caratteristica primaria (reference). Questo è l'approccio utilizzato nella loro app di esempio AVCam.
Tuttavia, i nostri clienti potrebbero avere app che non rientrano in questa categoria (ad esempio app di mobile banking), quindi non possiamo costringerli a rinunciare, abbiamo invece bisogno di gestire nuove funzionalità nell'SDK. Stiamo esplorando quale sarebbe l'approccio migliore per farlo, dal momento che i doc attualmente non ci dicono veramente cosa fare.
Abbiamo utilizzato la nostra semplice app di esempio Camera per analizzare il caso d'uso. L'app di esempio è disponibile su iOS 9 Beta 5.
Dall'app di esempio, è possibile vedere chiaramente quali eventi di sistema si verificano quando si utilizza Slide Over e quando si utilizza Vista divisa.
- Quando la nostra applicazione è primario, e scorrere sopra viene utilizzato, otteniamo
UIApplicationWillResignActiveNotification
eAVCaptureSessionDidStopRunningNotification
- Quando scorrere sopra viene utilizzato, e la nostra applicazione è secondario, otteniamo
UIApplicationWillEnterForegroundNotification
eAVCaptureSessionDidStopRunningNotification
subito dopo che - Quando La vista divisa viene utilizzata, su ogni resistenza del divisore, la nostra app ottiene
UIApplicationWillResignActiveNotification
. - Tuttavia, se la fotocamera viene lanciato quando a Spalato vista, diventa immediatamente
AVCaptureSessionDidStopRunningNotification
Quindi, empiricamente, sembra che AVCaptureSession
viene immediatamente interrotto quando vengono utilizzati scorrere sopra o Split View.
Ciò che confonde è che lo UIImagePickerController
, supportato dalla nostra app di esempio, presenta un comportamento completamente diverso.
UIImagePickerController
non viene interrotto quando l'app passa in Vista diapositiva su/divisa, invece, funziona completamente normalmente. Normalmente è possibile scattare una foto in Vista divisa. Infatti, due app, entrambe presenti nello UIImagePickerController
, possono funzionare fianco a fianco, con UIImagePickerController
dell'attivazione attiva dell'app. (Si può provare che eseguendo la nostra applicazione di esempio e applicazione Contatti -> Nuovo contatto -> Aggiungi foto)
Con tutto questo in mente, le nostre domande sono le seguenti:
Se
AVCaptureSession
viene messo in pausa quando si utilizzano la funzione Scorri e Dividi, è opportuno monitorareAVCaptureSessionDidStopRunningNotification
e presentare un messaggio "Fotocamera in pausa" all'utente, in modo che sappia chiaramente che l'app non sta eseguendo la scansione?Perché il comportamento di
UIImagePickerController
è diverso daAVCaptureSession
?Possiamo aspettarci da Apple che nel futuro versioni beta il comportamento delle modifiche
AVCaptureSession
corrisponda aUIImagePickerController
?
Sto lavorando su un app per il quale ho anche bisogno di utilizzare l'anteprima della fotocamera e non è affatto un'applicazione fotocamera centric . Sei riuscito a far funzionare la tua app in modalità SplitView? O semplicemente non è permesso da iOS di usare AVCaptureSession in SplitView? – Joss