在我的应用中,我需要使用滑块更改音量,我已经使用了当前音量
@IBOutlet weak var volumeChange: UISlider! {
didSet {
let audioSession = AVAudioSession.sharedInstance()
let volume : Float = audioSession.outputVolume
volumeChange.setValue(volume, animated: true)
}
}
如何更改它?现在,我有了这种方法
@IBAction func handleVolumeChange(_ sender: UISlider) {
player.volume = sender.value
}
在这种情况下,此方法无效。是否可以像在“音乐”应用中使之成为现实:通过更改设备中的音量来更改应用中的音量?
答案 0 :(得分:3)
要获取音量,您将需要像以前一样使用AVAudioSession.sharedInstance().outputVolume
。
为了允许用户控制音量,您需要看一下Media Player框架中的MPVolumeView
。该组件可以更改系统音量。
使用非常简单:
let volumeView = MPVolumeView(frame: volumeViewSize)
playerView.addSubview(volumeView)
您将要使用此类而不是使用UISlider
实例。提供的方法可让您覆盖滑块的外观。
此外,此类还提供一个控件,该控件允许用户选择输出路线(例如,iPhone,Airpods,Homepod或Apple TV)。您可以选择禁用滑块或输出路径控件,这样可以通过自定义用户界面为您提供相当广泛的选项。
如果使用情节提要,则需要将其添加到代码中。首先在情节提要上的视图控制器的视图中创建一个空的UIView
并将其附加到您的视图控制器:
添加后,您将在视图控制器中获得以下内容:
@IBOutlet var volumeSliderContainer: UIView!
private lazy var volumeView: MPVolumeView = {
let volumeView = MPVolumeView(frame: volumeSliderContainer.bounds)
volumeView.showsVolumeSlider = true
volumeView.showsRouteButton = true
volumeView.translatesAutoresizingMaskIntoConstraints = false
return volumeView
}()
override func viewDidLoad() {
super.viewDidLoad()
volumeSliderContainer.addSubview(volumeView)
NSLayoutConstraint.activate([
volumeView.widthAnchor.constraint(equalTo: volumeSliderContainer.widthAnchor),
volumeView.heightAnchor.constraint(equalTo: volumeSliderContainer.heightAnchor),
volumeView.centerXAnchor.constraint(equalTo: volumeSliderContainer.centerXAnchor),
volumeView.centerYAnchor.constraint(equalTo: volumeSliderContainer.centerYAnchor),
])
}
现在,您将可以根据需要与MPVolumeView
进行交互。
仅需在模拟器上当心,该组件将不会渲染滑块,只有在实际设备上运行应用程序时,您才能看到它。
答案 1 :(得分:0)
获取当前系统卷-
from nltk import word_tokenize
[prev for prev,this in zip(lines,lines[1:])
if words & set(word_tokenize(this))]
#['I want this line1.', 'I want this line2.']