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

在iOS 5中,音量.showsCameraControlls == YES按钮现在将在相机应用程序中拍摄照片,并在.showsCameraControlls == YES实例上显示.showsCameraControlls == YES 。 快乐的时光。

但是,当我将showsCameraControlls设置为NO并提供我自己的(它反过来触发takePicture方法)时,音量takePicture按钮将不再起作用。 在UIImagePickerController显示时如何检测音量事件?

检测音量变化的旧方法是这样的:

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

我将此代码添加到我的应用程序委托中。 奇怪的是volumeChanged:直到我第一次显示UIImagePickerController之后才会触发。 更重要的是,它不会在UIImagePickerController可见时触发(也不会显示通常的音量HUD),我想是因为Apple禁用它并劫持了该事件。

那么再一次,是否有任何方法可以检测音量UIImagePickerController按钮事件,而在使用自定义相机控件时,为了拍照而显示UIImagePickerController

如果您想知道为什么我需要使用自定义相机控件,那是因为我希望能够拍摄多张照片,标准相机控制不允许这些照片。

在iOS 8上,您可以向通知添加观察者_UIApplicationVolumeUpButtonDownNotification

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

如果你正在使用UIImagePickerController ,我能够捕获事件并使用它来自定义视图调用TakePicture

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

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

尝试使用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/