storyboard上布局:web
stack view上捆绑7个按钮,更改如下三个属性:
调整每一个按钮的tag属性:
数组
把每一个按钮托在一个IBAction里面
效果:
ide
建立播放器:svg
import UIKit import AVFoundation class ViewController: UIViewController { var player: AVAudioPlayer!; //player至关于一个CD机,里面不知道有没有CD因此是option类型 @IBAction func soundsButton(_ sender: UIButton) { } override func viewDidLoad() { super.viewDidLoad() } }
建立一个保存全部声音的sounds字符串数组,配合tag实现声音的调用函数
class ViewController: UIViewController { var player: AVAudioPlayer!; var sounds = ["note1","note2","note3","note4","note5","note6","note7"]; @IBAction func soundsButton(_ sender: UIButton) { play(tag: sender.tag);//这里的sender就是被按下的Button自己 } override func viewDidLoad() { super.viewDidLoad() } func play(tag:Int) { let url = Bundle.main.url(forResource: sounds[tag], withExtension: "wav") //经过Bundle.main.url找到声音的路径,至关于找到一张CD do{ player = try AVAudioPlayer(contentsOf: url!);//尝试将CD放进CD机内 player.play()//运行CD机 }catch{ print(error) } } }
最后完成的代码布局
import UIKit import AVFoundation //做用域--scope--在大括号里面定义的变量,出了大括号是无法使用的 class ViewController: UIViewController{ var player:AVAudioPlayer!//建立一个播放器(相似于CD机) let sounds = ["note1","note2","note3","note4","note5","note6","note7"]//全局变量 //页面加载时执行 override func viewDidLoad() { super.viewDidLoad() } //用户按下按钮时执行 @IBAction func notePressed(_ sender: UIButton) { play(tag:sender.tag)//调用函数 } //建立一个发出声音的功能函数 func play(tag: Int){ //找到音频文件(相似于拿出一张CD光盘)-局部变量 let url = Bundle.main.url(forResource: sounds[tag-1], withExtension: "wav") do{ player = try AVAudioPlayer(contentsOf: url!)//在CD机里面放入CD光盘 player.play()//按下播放按钮 }catch{ print(error)//放入的CD光盘可能有损坏致使CD机读不出来,咱们须要用docatch来捕捉可能的错误,防止App闪退 } } }