Swift 按下按钮时使用滑块
使用Xcode 8、Swift 3和Interface Builder以及故事板和一个非常基本的视图控制器,该控制器只有一个按钮(播放)和一个滑块(音量) 我试图在按下按钮的同时使用NSSlider。例如,我需要能够在缓慢降低音量的同时继续按“播放”。相反,一次只能使用一个按钮。因此,只要我使用返回键按下“播放”,我就无法调整音量,反之亦然 在本例中,播放按钮由“返回”键触发 以下是ViewController.swift中的代码。这只是我为研究这个问题而快速创建的一个示例应用程序 NSSLider上是否有我缺少的Interface Builder设置,或者我可以在代码中做些什么来实现我想要做的事情Swift 按下按钮时使用滑块,swift,xcode,macos,interface-builder,Swift,Xcode,Macos,Interface Builder,使用Xcode 8、Swift 3和Interface Builder以及故事板和一个非常基本的视图控制器,该控制器只有一个按钮(播放)和一个滑块(音量) 我试图在按下按钮的同时使用NSSlider。例如,我需要能够在缓慢降低音量的同时继续按“播放”。相反,一次只能使用一个按钮。因此,只要我使用返回键按下“播放”,我就无法调整音量,反之亦然 在本例中,播放按钮由“返回”键触发 以下是ViewController.swift中的代码。这只是我为研究这个问题而快速创建的一个示例应用程序 NSSLid
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的建议,我也尝试过这个方法,但它也不起作用。继续按“返回”按钮的快捷键时,仍然无法处理滑块
iAction是UI事件,因此不适合同时进行多次单击(您只有一个鼠标指针)。用于处理键盘事件以同时执行操作 您还需要实现鼠标事件,这些链接应有助于:
你不能用体积和牵引力的结合来表演动作吗?我不知道你的意思。我需要能够同时或分别使用这两个动作。我想通过按下“回车键”一遍又一遍地播放声音,同时(用另一只手)使用鼠标上下拖动滑块,从而改变音量。到目前为止,我只能做其中之一。你能给我举个例子说明你的意思吗?谢谢。我试着调整代码,这样我就不用IB内置的“等效键”,而是用keyDown调用一个函数来播放声音。我还是会遇到同样的问题。只要我用鼠标控制滑块,我就不能用键触发播放功能。我一直在尝试使用你的建议,但我似乎无法让它工作。我一直在看你分享的所有链接,并试图从Objective-C翻译成Swift,但运气不好。这类事情只发生在Python中(在我创建的同一个应用程序的另一个版本中)。你能给我举个快速的例子吗?我只想在调整音量的同时,能够一直按我的等效键(回车键)。
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()
}
}