0
我需要編寫iOS應用程序,通過在iPhone或iPad上按上音量鍵來倒計時。因此,我使用了一些來自這裏的建議來使用AVAudioSession並觀察「outputVolume」鍵。Swift:從後臺返回後使用音量按鈕不起作用
在這裏,你可以找到我的ViewController的代碼:
import UIKit
import MediaPlayer
class ViewController: UIViewController, UIPopoverPresentationControllerDelegate {
@IBOutlet weak var chickenLabel: UILabel!
let audioSession = AVAudioSession.sharedInstance()
var maxHendl:Int = 100
var istHendl:Int = 100
var isVolumeChanged = false
override func viewDidLoad() {
super.viewDidLoad()
}
override func viewWillAppear(_ animated: Bool) {
listenVolumeButton()
removeVolumeView()
}
func listenVolumeButton() {
do {
try audioSession.setActive(true)
}
catch {
print(error.localizedDescription)
}
audioSession.addObserver(self, forKeyPath: "outputVolume", options: .new, context: nil)
}
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
if keyPath == "outputVolume" {
if isVolumeChanged == false {
// Set Volume to 50%
MPVolumeView().subviews.filter{NSStringFromClass($0.classForCoder) == "MPVolumeSlider"}.first as? UISlider)?.setValue(0.5, animated: false)
//do some Counting
}
}
}
func removeVolumeView() {
let volumeView: MPVolumeView = MPVolumeView(frame: CGRect.zero)
view.addSubview(volumeView)
}
}
一切正常,因爲它應該在啓動應用程序在第一次之後。當我現在按下主頁按鈕並返回到應用程序時,按下音量按鈕的事件不會被捕獲,並且MPVolumeWindow會再次顯示。
有人可以幫我解決這個問題嗎?
問候 阿明
我想通過在ViewWillAppear中調用listenVolumeButton()和removeVolumeView()來完成此操作。這是不是這樣工作?當DidBecomeActive被調用時,我是否必須在AppDelegate中執行此操作? – Armin
「viewWillAppear」不會因爲您的應用在非活動狀態後變爲活動狀態而被調用。 – matt
重新激活AppDelegate(willBecomeActive)中的AudioSession解決了這個問題。非常感謝你! – Armin