iOS版。用音量按钮捕捉照片

时间:2017-04-21 10:24:41

标签: ios swift

你好有很多相关的问题,但我会说他们都没有给出如何使用音量按钮拍摄照片的明确答案。

目前我将观察者添加到AVAudioSession实例,但它不适用于最大和最小音量值,并且似乎在相机上显示音量状态阴影弹出。

private func setupButtonsListener(){
    do {
        let audioSession = AVAudioSession.sharedInstance()
        try audioSession.setActive(true)

        audioSession.addObserver(self, forKeyPath: "outputVolume", options: NSKeyValueObservingOptions.new, context: nil)
    } catch {
        print("Error")
    }

}

然后我在函数中处理事件:

override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
    if keyPath == "outputVolume" {
        capturePhoto() // Same function which I use for capturing photo for screen button.
    } else {
        super.observeValue(forKeyPath: keyPath, of: object, change: change, context: context)
    }
}

您能否向我推荐任何解决方案: 1.即使达到最大/最小体积值也能工作。 2.不会在屏幕上显示音量值弹出。

修改

基于@ jayesh-kanzariya回答我在Swift中添加了如何使用JPSVolumeButtonHandler:

  1. pod 'JPSVolumeButtonHandler'添加到您的pod文件中。
  2. 在项目的根目录中执行pod install
  3. 为您的项目配置桥接文件并添加:#import <JPSVolumeButtonHandler/JPSVolumeButtonHandler.h>
  4. 在ViewController中添加以下代码:

    import JPSVolumeButtonHandler
    
    class YourViewController {
        var volumeHandler: JPSVolumeButtonHandler?
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            self.volumeHandler = JPSVolumeButtonHandler(up: {self.capturePhoto()}, downBlock: {self.capturePhoto()})
    
            ...
        }    
    }
    
  5. 完成!

2 个答案:

答案 0 :(得分:1)

1)对于音量变化 您需要实现自己的“MPVolumeView”,确保此视图位于可见边界之外(将其alpha设置为零或隐藏它,将禁用您的视图并显示众所周知的Apple音量控制) 例如。 x偏移-20,y-offsrt -20和宽度/高度等于0

import MediaPlayer

let volumeView = MPVolumeView()
volumeView.frame = CGRect(x: -20, y: -20, width: 0, height: 0);

2)为了获得音量变化的连续更新,即使它已达到最大/最小 因为您已经注册为AVAudioSession的观察者。我会在您收到事件后将AVAudioSession的音量重置为0.1到0.9之间的值(无论您需要增加/减少音量)。

case let volumeSlider as UISlider in volumeView.subviews {
    volumeSlider.value = 0.2
}

答案 1 :(得分:0)

@ jayesh-kanzariya的略微修改版本对我有用。

  1. pod 'JPSVolumeButtonHandler'添加到您的pod文件中。

  2. 在项目的根目录中执行pod install

  3. 在ViewController中添加以下代码:

    import JPSVolumeButtonHandler
    
    class YourViewController {
        var volumeHandler: JPSVolumeButtonHandler?
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            self.volumeHandler = JPSVolumeButtonHandler(up: {self.capturePhoto()}, downBlock: {self.capturePhoto()})
    
            self.volumeHandler.start(true)
            ...
        }    
    }