Моя команда разрабатывает набор SDK для barcode scanning, ID scanning и OCR. Мы используем камеру устройства, в частности, AVCaptureSession
, для получения видеокадров, на которых мы выполняем нашу обработку.Как использовать AVCaptureSession со слайдом и раздельным просмотром в iOS 9?
Мы изучаем новые функции многозадачности iOS 9. Слайд и разделение.
Apple, предлагает выбор в пользу из этих функций для камер-ориентированных приложений, где используя весь экран для предварительного просмотра и захват момента быстро является основной особенностью (reference). Это подход, используемый в их примере приложения AVCam.
Однако у наших клиентов могут быть приложения, которые не относятся к этой категории (например, приложения для мобильного банкинга), поэтому мы не можем заставить их отказаться, вместо этого нам нужно обрабатывать новые функции в SDK. Мы изучаем, как лучше всего это сделать, поскольку в настоящий момент документы не говорят нам, что делать.
Мы использовали наше приложение для простого примера камеры, чтобы проанализировать прецедент. Пример приложения можно найти на сайте Github, и он разработан на базе iOS 9 Beta 5.
Из примера приложения видно, какие системные события происходят при использовании режима «Слайд» и когда используется Split View.
- Когда наше приложение является первичным, а скользят используется, мы получаем
UIApplicationWillResignActiveNotification
иAVCaptureSessionDidStopRunningNotification
- Когда скользят используется, и наше приложение является вторичным, мы получаем
UIApplicationWillEnterForegroundNotification
иAVCaptureSessionDidStopRunningNotification
сразу же после этого - Когда Используется Split View, при каждом перетаскивании разделителя наше приложение получает
UIApplicationWillResignActiveNotification
. - Однако, если камера запускается, когда в Split View, он сразу же получает
AVCaptureSessionDidStopRunningNotification
Так, опытным путем, это выглядит как AVCaptureSession
немедленно прекращается, когда скользят или Split View используются.
Что сбивает с толку то, что UIImagePickerController
, которое также поддерживает наше примерное приложение, демонстрирует совершенно другое поведение.
UIImagePickerController
не останавливается, когда приложение переходит в режим слайд-просмотра/разделения, вместо этого он функционирует нормально. Обычно можно сфотографировать в режиме Split View. Фактически, два приложения, оба из которых присутствуют UIImagePickerController
, могут работать бок о бок, при активном активном приложении UIImagePickerController
. (Вы можете попробовать это, запустив наш пример приложения, и приложение Контакты -> Новый контакт -> Добавить фото)
С учетом всего этого, наши вопросы являются следующие:
Если
AVCaptureSession
сразу же приостанавливается, когда используются функции «Слайд-режим» и «Сплит-просмотр», рекомендуется ли отслеживатьAVCaptureSessionDidStopRunningNotification
и представлять пользователю сообщение «Camera Paused», чтобы он ясно знал, что приложение не выполняет сканирование?Почему поведение
UIImagePickerController
отличается отAVCaptureSession
?Можно ли ожидать от Apple, чем в будущих версиях бета-версии
AVCaptureSession
изменений, которые соответствуютUIImagePickerController
?
Я работаю над приложением, для которого я также необходимо использовать предварительный просмотр камеры, и это вовсе не приложение камеры центрической , Удалось ли вам заставить приложение работать в режиме SplitView? Или iOS просто не разрешает использовать AVCaptureSession в SplitView? – Joss