当使用带有自定义相机控件的UIImagePickerController时,如何在音量增大事件上拍照?

时间:2012-02-02 08:47:03

标签: ios uiimagepickercontroller volume

在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 个答案:

答案 0 :(得分:4)

在iOS 8上,您可以向通知_UIApplicationVolumeUpButtonDownNotification

添加观察者
[[NSNotificationCenter defaultCenter] addObserver:self
                                      selector:@selector(volumeChanged:)
                                      name:@"_UIApplicationVolumeUpButtonDownNotification"
                                      object:nil];

如果您使用UIImagePickerController,我可以捕获该事件并使用它以自定义视图调用TakePicture

最重要的是,UIImagePickerController确保按下音量不会改变音量。

我不确定Apple是否会批准听取该通知的应用程序;这似乎是最干净的方法。

答案 1 :(得分:2)

尝试使用AVCapture API而不是UIImagePicker。这是一个教程:

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

它的级别要低得多,而且使用起来比较困难,但它不应该阻止音量控制。

您可能还想尝试播放静音音频文件以在图像捕捉期间启用音量控制等技巧。

更新:我还发现本教程使用音量按钮进行相机快门:

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