【问题标题】:How to implement sender.selected if statement into UISlider?如何在 UISlider 中实现 sender.selected if 语句?
【发布时间】:2016-06-23 09:54:36
【问题描述】:

我正在尝试创建一个滑块,它可以根据滑块的值更改音频。因此,例如,如果滑块值为 0,则不会播放音频。如果值为 1,播放“song a”,如果值为 2,播放“song b”等。

我正在使用 AVFoundation 并创建了我的声音播放器:

var soundPlayer:AVAudioPlayer = AVAudioPlayer()

我已在我的滑块中添加了出口:

@IBOutlet weak var audioSlider: UISlider!
@IBOutlet weak var audioSliderPlay: UISlider!

定义了我的音频的文件位置:

 let audioLocation = NSBundle.mainBundle().pathForResource("song a", ofType: ".mp3")

为我的播放器创建了一个 do 方法:

do {
audioSoundPlayer = try AVAudioPlayer (contentsOfURL: NSURL (fileURLWithPath: audioLocation!))
catch {
        print(error)
    }

并创建了我的操作:

@IBAction func audioSlider(sender: UISlider) {
    if (!sender.selected) {
        audioSoundPlayer.play()
        audioSoundPlayer.numberOfLoops = -1
    }

Now - the slider currently activates song a when any value is chosen.音频一旦开始,就无法停止。我需要添加一个 sender.value 并创建定义该值的变量并选择我要添加的其他歌曲。

请帮忙?!

Amit 问题编辑:

Amit - 我已将滑块的最大值更改为 3 以获取 3 个音频。

将以下内容添加到 IBAction 后,滑块在达到最大值后仅播放一段音频:

@IBAction func audioSlider(sender: UISlider) {
    let sliderValue = (sender.value)
    if sliderValue == 1 {
       soundPlayer1.play()
        soundPlayer1.numberOfLoops = -1

    }
    else if sliderValue == 2 {
       soundPlayer2.play()
        soundPlayer2.numberOfLoops = -1


    }
    else if sliderValue == 3 {
        soundPlayer3.play()
        soundPlayer3.numberOfLoops = -1

    }
    else if sliderValue == 0 {
soundPlayer1.stop()
soundPlayer2.stop()
soundPlayer3.stop()
    }
}

【问题讨论】:

  • 如果你想要滑块值只需使用“let value = Int(sender.value)”
  • sliderValue 你得到的是一个浮点值,它与 1.0 或 2.0 不完全匹配

标签: ios swift avfoundation volume ibaction


【解决方案1】:

您将滑块的 value 属性设置为 sender.value 将其类型转换为 Int 并根据需要更改音频。

在使用之前,您确实需要设置滑块的minimummaximum 值。

将默认设置为0,最小设置为0,最大设置为您的需要或您拥有的歌曲数量。

您可以使用“模式匹配”运算符 ~=:

let sliderValue = Int(slider.value)

if 100 ... 199 ~= sliderValue {
    print("play audio 1")
}
else if 200 ... 299 ~= sliderValue {
    print("play audio 2")
}

【讨论】:

  • 谢谢阿米特。我已经这样做了,但是我的 if else 语句有一些问题:@IBAction func audioSlider(sender: UISlider) { let sliderValue = (sender.value) if sliderValue == 100-199 { soundPlayer1.play() soundPlayer1.numberOfLoops = -1 } else if sliderValue == 200-299 { soundPlayer2.play() soundPlayer2.numberOfLoops = -1 } else if sliderValue == 0-99 { } 我错过了什么? - 播放器只需播放其中一种声音。滑块设置为值 300
  • 请用您的问题更新您的问题。另外,如果您在 100-199 左右的范围内播放相同的 soundPlayer,那么使用该范围的目的是什么?请在问题本身中解释您的问题。
  • 另外,根据您上次的评论,您的情况似乎总是将 -99 设为 100-199 = -99, 200-299 = -99
  • sliderValue 可能不匹配,因为它是 floatValue。您需要像我在更新的答案中所做的那样将其类型转换为 Int
  • 很高兴为您提供帮助:)
【解决方案2】:

1.将 Slider 的最大值设置为包中存在的音频文件数。

2.创建一个包含所有音频文件名或资源路径的数组。 喜欢

slider.maxValue = 5;
let audioPaths = ["1.mp3", "2.mp3", "3.mp3", "4.mp3", "5.mp3"];

@IBAction func audioSlider(sender: UISlider) 
{
     var index = Int(sender.value);
     let audioPath = audioPaths[index];
    do
    {
         audioSoundPlayer = try AVAudioPlayer (contentsOfURL: NSURL (fileURLWithPath: audioLocation!))
         catch 
         {
             print(error)
         } 
    }
}

【讨论】:

    猜你喜欢
    • 2014-11-11
    • 1970-01-01
    • 2013-03-05
    • 2018-05-11
    • 1970-01-01
    • 2015-08-09
    • 1970-01-01
    • 2012-05-19
    • 1970-01-01
    相关资源
    最近更新 更多