iOS。用音量按钮捕捉照片
问题描述:
你好,有一堆相关的问题,但我会说,他们都没有给出明确的答案如何捕捉与音量按钮的照片。iOS。用音量按钮捕捉照片
目前我将观察者添加到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答案我添加了如何在斯威夫特使用JPSVolumeButtonHandler
:
- 添加
pod 'JPSVolumeButtonHandler'
到您的吊舱文件。 - 在项目的根执行
pod install
- 配置桥接文件为您的项目,并添加有:
#import <JPSVolumeButtonHandler/JPSVolumeButtonHandler.h>
-
在你的ViewController添加以下代码:
import JPSVolumeButtonHandler class YourViewController { var volumeHandler: JPSVolumeButtonHandler? override func viewDidLoad() { super.viewDidLoad() self.volumeHandler = JPSVolumeButtonHandler(up: {self.capturePhoto()}, downBlock: {self.capturePhoto()}) ... } }
完成!
答
1)对于音量变化 您需要实现您自己的“MPVolumeView”,确保此视图位于可见边界之外的某处(将其alpha设置为零或隐藏它,将禁用您的视图并呈现众所周知的苹果音量控制) 例如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
}