Как сделать фотографию на событие увеличения громкости при использовании UIImagePickerController с пользовательскими элементами управления камерой? - PullRequest
1 голос
/ 02 февраля 2012

В iOS 5 кнопка увеличения громкости теперь делает снимок в приложении камеры, а в случае UIImagePickerController, где .showsCameraControlls == YES.Счастливые дни.

Однако, когда я установил showsCameraControlls на NO и ввел свой собственный (который в свою очередь вызывает метод takePicture), кнопка увеличения громкости больше не будет работать.Как я могу обнаружить событие тома, когда отображается UIImagePickerController?

Старый способ обнаружения изменений тома был таким:

AudioSessionSetActive(true);
[[NSNotificationCenter defaultCenter]
   addObserver:self
   selector:@selector(volumeChanged:)
   name:@"AVSystemController_SystemVolumeDidChangeNotification"
   object:nil];

Я добавил этот код в свой делегат приложения.Странно, но volumeChanged: не срабатывает до тех пор, пока я не покажу UIImagePickerController в первый раз.Что еще более важно, он не запускается, когда UIImagePickerController виден (и не показан обычный том HUD), я полагаю, поскольку Apple отключила его и захватила событие.

Итак, еще раз, есть ли способ обнаружитьсобытие кнопки увеличения громкости, когда отображается UIImagePickerController при использовании пользовательских элементов управления камерой, с целью сделать фотографию?

Если вам интересно, зачем мне использовать пользовательские элементы управления камерой,это потому, что я хочу иметь возможность делать несколько фотографий, которые не позволяют стандартные элементы управления камерой.

Ответы [ 2 ]

4 голосов
/ 28 ноября 2014

В iOS 8 вы можете добавить наблюдателя в уведомление _UIApplicationVolumeUpButtonDownNotification

[[NSNotificationCenter defaultCenter] addObserver:self
                                      selector:@selector(volumeChanged:)
                                      name:@"_UIApplicationVolumeUpButtonDownNotification"
                                      object:nil];

Если вы используете UIImagePickerController, я смог захватить событие и использовать его для вызова TakePicture с пользовательским представлением.

Кроме того, UIImagePickerController гарантирует, что увеличение громкости не изменит громкость.

Я не уверен, одобрит ли Apple приложение, слушающее это уведомление; это кажется самым чистым подходом.

2 голосов
/ 02 февраля 2012

Попробуйте использовать API AVCapture вместо UIImagePicker. Вот учебник:

http://www.musicalgeometry.com/?p=1273

Это намного более низкий уровень, и его сложнее использовать, но он не должен блокировать регуляторы громкости.

Возможно, вы захотите попробовать хитрость, например, воспроизведение аудиофайла без звука, чтобы включить регуляторы громкости во время захвата изображения.

Обновление: я также нашел этот урок по использованию кнопки громкости для затвора камеры:

http://ios.biomsoft.com/2011/12/07/taking-control-of-the-volume-buttons-on-ios-like-camera/

...