How to take a photo on the volume-up event when using UIImagePickerController with custom camera controls?

笑着哭i 提交于 2019-11-28 02:25:55

问题


In iOS 5, the volume-up button will now take a photo in the camera app, and on a UIImagePickerController instance where .showsCameraControlls == YES. Happy days.

However, when I set showsCameraControlls to NO, and supply my own (which in turn triggers takePicture method), the volume-up button will no longer work. How can I detect the volume event while the UIImagePickerController is showing?

The old way to detect volume changes was like so:

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

I added this code to my application delegate. Strangely volumeChanged: is not triggered until after I show the UIImagePickerController for the first time. More importantly, it isn't triggered while the UIImagePickerController is visible (nor is the usual volume HUD shown), I guess since Apple disabled it & hijacked the event.

So once again, is there any way to detect the volume-up button event, while the UIImagePickerController is being displayed, when using custom camera controls, for the purpose of taking a photo?

If you're wondering why I need to use custom camera controls, it is because I want the ability to take multiple photos, which the standard camera controls do not allow.


回答1:


On iOS 8 you can add an observer to the notification _UIApplicationVolumeUpButtonDownNotification

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

If you are using UIImagePickerController, I was able to capture the event and use it to call TakePicture with a custom view.

On top of that, UIImagePickerController ensures that pressing volume up won't change the volume.

I'm not sure if Apple would approve an app listening to that notification; this seems to be the cleanest approach.




回答2:


Try using the AVCapture APIs instead of UIImagePicker. Here's a tutorial:

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

It's a lot lower level and it's harder to use, but it shouldn't block the volume controls.

You might also want to try a trick like playing a silent audio file to enable the volume controls during image capture.

Update: I also found this tutorial on using the volume button for camera shutter:

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



来源:https://stackoverflow.com/questions/9109353/how-to-take-a-photo-on-the-volume-up-event-when-using-uiimagepickercontroller-wi

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!