您好,有很多相关问题,但我想说他们都没有给出明确的答案如何使用音量按钮拍摄照片。
目前,我将观察者添加到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")
}
}
Run Code Online (Sandbox Code Playgroud)
然后我在函数中处理事件:
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)
}
}
Run Code Online (Sandbox Code Playgroud)
您能否向我推荐任何解决方案,该解决方案将: 1. 即使达到最大/最小体积值也能工作。2. 屏幕上不会弹出音量值。
编辑:
基于 @jayesh-kanzariya 的回答,我添加了如何在 Swift 中使用 JPSVolumeButtonHandler:
pod 'JPSVolumeButtonHandler'到您的 pod 文件。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()})
...
}
}
Run Code Online (Sandbox Code Playgroud)完毕!
1)对于音量变化您需要实现自己的“MPVolumeView”,确保该视图位于可见边界之外的某个位置(将其alpha设置为零,或隐藏它,将禁用您的视图并呈现众所周知的苹果音量控制)例如 x-offset -20,y-offsrt -20 且宽度/高度等于 0
import MediaPlayer
let volumeView = MPVolumeView()
volumeView.frame = CGRect(x: -20, y: -20, width: 0, height: 0);
Run Code Online (Sandbox Code Playgroud)
2) 为了获得音量变化的持续更新,即使它已经达到最大/最小,因为您已经注册为 AVAudioSession 的观察者。在您收到事件后,我会将 AVAudioSession 的音量重置为 0.1 到 0.9 之间的值(无论您需要增加/减少音量)。
case let volumeSlider as UISlider in volumeView.subviews {
volumeSlider.value = 0.2
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2822 次 |
| 最近记录: |