使用Xcode 8,Swift 3和界面生成器與故事板以及僅包含按鈕(播放)和滑塊(音量)的非常基本的視圖控制器。按下按鈕時使用滑塊swift
我試圖在按下按鈕的同時使用我的NSSlider。例如,我需要能夠在緩慢降低音量的同時繼續按「播放」。取而代之的是,一次只能使用一個按鈕。所以,只要我使用返回鍵按下「播放」,我就無法調節音量,反之亦然。
在此示例中,播放按鈕由「返回」鍵觸發。
這是ViewController.swift中的代碼。這只是我爲快速研究問題而創建的一個示例應用程序。
NSSLider上是否存在Interface Builder設置,或者我可以在代碼中執行某些操作來實現我正在嘗試執行的操作?
import Cocoa
import AVFoundation
class ViewController: NSViewController {
var audioPlayer = AVAudioPlayer()
var sliderValue: Float = 0
@IBOutlet weak var volumeSliderOutlet: NSSlider!
override func viewDidLoad() {
super.viewDidLoad()
do{
audioPlayer = try AVAudioPlayer(contentsOf: URL.init(fileURLWithPath: Bundle.main.path(forResource: "bell ding", ofType: "wav")!))
}
catch {
print(error)
}
audioPlayer.prepareToPlay()
// Do any additional setup after loading the view.
}
@IBAction func playButtonAction(_ sender: NSButton) {
if audioPlayer.isPlaying {
audioPlayer.currentTime = 0.0
audioPlayer.play()
} else {
audioPlayer.prepareToPlay()
audioPlayer.play()
}
}
@IBAction func volumeSliderAction(_ sender: NSSlider) {
if audioPlayer.isPlaying {
sliderValue = self.volumeSliderOutlet.floatValue
audioPlayer.volume = sliderValue
} else {
return
}
}
override var representedObject: Any? {
didSet {
// Update the view, if already loaded.
}
}
}
我也試過這個,基於@ inspector_60的建議,但它也不起作用。在繼續按下「返回」按鈕的快捷鍵時仍然無法處理滑塊。
override func keyDown(with event: NSEvent) {
if (event.keyCode == 36) {
self.playButtonAction(nil)
}
else {
return
}
}
func playButtonAction(_ sender: NSButton?) {
if audioPlayer.isPlaying {
audioPlayer.currentTime = 0.0
audioPlayer.play()
} else {
audioPlayer.prepareToPlay()
audioPlayer.play()
}
}
你不能使用Play actio在VolumeSliderAction上合併? – ppinho
我不確定你的意思。我需要能夠同時或單獨使用這兩種操作。我想通過按住「返回」來反覆播放聲音,同時(用我的另一隻手)用鼠標上下拖動滑塊,從而改變音量。截至目前,我只能做一個或另一個。你能給我一個你的意思嗎? – RickshawBoy