gpt4 book ai didi

swift - 快速按下按钮时使用 slider

转载 作者:行者123 更新时间:2023-11-30 12:17:52 25 4
gpt4 key购买 nike

使用 Xcode 8、Swift 3 和 Interface Builder 以及 Storyboards 和一个非常基本的 View Controller ,仅包含一个按钮(播放)和一个 slider (音量)。

我尝试在按下按钮的同时使用 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的建议,我也尝试过这个,但它也不起作用。继续按“返回”按钮的快捷键时仍然无法处理 slider 。

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()
}
}

最佳答案

IBAction 是 UI 事件,因此不适契约(Contract)时多次单击(您只有一个鼠标指针)。使用handling key events为了处理同时操作的键盘事件。

您还需要实现鼠标事件,这些链接应该有所帮助:

  1. 有关鼠标事件的 Apple 文档,特别是 Filtering Out Key Events During Mouse-Tracking Operations
  2. This stack overflow answer关于如何实现这种方法
  3. 这个post这将为您提供更多信息和示例 - 罗恩的答案链接到一个与您的问题没有什么不同的问题

关于swift - 快速按下按钮时使用 slider ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45177755/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com