Xcode 8、Swift 3、Interface Builderをストーリーボードで使用し、ボタン(再生)とスライダー(ボリューム)を備えた非常に基本的なビューコントローラー。ボタンスウィフトを押しながらスライダーを使用
ボタンを同時に押しながらNSSliderを使用しようとしています。例えば、音量をゆっくり下げながら「再生」を押し続けることができるようにする必要があります。代わりに、一度に使用できるボタンは1つだけです。だから、リターンキーを使って "Play"を押している限り、ボリュームを調整することはできず、その逆もありません。
この例では、再生ボタンは「戻る」キーによってトリガーされます。
ここに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のnが結合されていますか? – ppinho
私はあなたが何を意味するか分かりません。私は、両方のアクションを同時に、または別々に使用できる必要があります。私は、マウスを使ってスライダを上下にドラッグして音量を変更しながら(私の他の手で)「戻る」を押すことによって、何度も音を鳴らしたいと思っています。現時点では、私はどちらか一方しか行うことができません。あなたは私があなたが意味するものの例を教えてもらえますか? – RickshawBoy