用Swift語(yǔ)言進(jìn)行iOS開發(fā)字旭,如需加上背景音樂(lè)并進(jìn)行簡(jiǎn)單地控制可以使用AV Foundation框架蛾洛,而對(duì)于壓縮過(guò)的Audio文件或者超過(guò)30秒的音頻文件烤礁,則使用AVAudioPlayer類关翎。
為APP加上背景音樂(lè)
?
首先陆赋,在ViewController.swift的文件頂部添加?行代碼:
import AVFoundation
//引入一個(gè)新的AVFoundation框架
? ? 其次沐祷,在類中定義其它實(shí)例變量的代碼下?再添加?行代碼:
var audioPlayer:
AVAudioPlayer!
//添加一個(gè)AVAudioPlayer類型的播放器變量
? ??添加一個(gè)新的方法:
func playBgMusic(){
let musicPath =
NSBundle.mainBundle().pathForResource("bgmusic", ofType:
"mp3")
//指定音樂(lè)路徑
let url = NSURL(fileURLWithPath:
musicPath!)
audioPlayer =
AVAudioPlayer(contentsOfURL: url, error: nil)
audioPlayer.numberOfLoops =
-1
//設(shè)置音樂(lè)播放次數(shù)嚷闭,-1為循環(huán)播放
maudioPlayer.volume
= 1
//設(shè)置音樂(lè)音量,可用范圍為0~1
audioPlayer.prepareToPlay()
audioPlayer.play()
}
有關(guān)AVAudioPlayer類的更多信息戈轿,請(qǐng)參見AVAudioPlayer類參考凌受。
?
在適當(dāng)位置調(diào)用函數(shù):
override func viewDidLoad() {
super.viewDidLoad()
playBgMusic()
}
//每次視圖控制器載入時(shí)調(diào)用函數(shù)
或
override func
viewWillAppear(animated: Bool) {
playBgMusic()
}
//每次視圖控制器的視圖出現(xiàn)前調(diào)用函數(shù)
viewwillappear是每次視圖控制器的視圖出現(xiàn)前執(zhí)行的代碼。而viewdidload是每次視圖控制器載入是執(zhí)行的代碼思杯。 比如說(shuō):當(dāng)a視圖控制器的視圖第一次出現(xiàn)是兩個(gè)都要執(zhí)行胜蛉,但當(dāng)a被push后有pop回來(lái)時(shí),只有viewwillappear執(zhí)行色乾。
使用音樂(lè)開關(guān)按鈕對(duì)音樂(lè)播放進(jìn)行控制
對(duì)AVAudioPlayer對(duì)象執(zhí)行播放誊册、暫停、或者停止操作暖璧,可以通過(guò)playing屬性來(lái)檢測(cè)當(dāng)前是否正在播放案怯。以下方法實(shí)現(xiàn)了使用UIButton對(duì)音樂(lè)進(jìn)行播放/暫停控制澎办,并更新了按鈕的圖片顯示嘲碱。
? ? 在類中定義按鈕變量:
@IBOutlet weak var voiceButton: UIButton!
? ? 在viewDidLoad()為voiceButton添加動(dòng)作:
voiceButton.addTarget(self, action:"voice", forControlEvents: .TouchUpInside)
? ? 添加voice方法:
func voice() {
if !audioPlayer.playing {
audioPlayer.play()
voiceButton.setImage(UIImage(named:"voicebutton@3x.png"),forState:.Normal)
//如果背景音樂(lè)沒有播放,令其開始播放并將按鈕顯示為播放圖片
}else{
audioPlayer.stop()
voiceButton.setImage(UIImage(named:"silencebutton@3x.png"), forState:.Normal)
//如果背景音樂(lè)正在播放局蚀,令其停止播放并將按鈕顯示為靜音圖片
}
}
以上操作也可直接對(duì)按鈕關(guān)聯(lián)方法麦锯。
AB頁(yè)面反復(fù)跳轉(zhuǎn),背景音樂(lè)僅調(diào)用一次
在正常情況下琅绅,如果只對(duì)A頁(yè)面進(jìn)行背景音樂(lè)設(shè)置扶欣,跳轉(zhuǎn)至B頁(yè)面時(shí)音樂(lè)不停止可正常播放,但返回A頁(yè)面時(shí)會(huì)再次播放一層音樂(lè)千扶,此時(shí)可以先對(duì)audioPlayer是否正在播放音樂(lè)進(jìn)行判斷:
if !audioPlayer.playing {
audioPlayer.play()
}
//如果audioplayer沒有播放料祠,則令其開始播放
A頁(yè)面跳轉(zhuǎn)至B頁(yè)面,背景音樂(lè)正常播放澎羞;B頁(yè)面跳轉(zhuǎn)至C頁(yè)面髓绽,背景音樂(lè)切換
可以利用頁(yè)面?zhèn)髦颠M(jìn)行解決,適用于背景音樂(lè)不同的多頁(yè)面向B頁(yè)面進(jìn)行跳轉(zhuǎn)妆绞,音樂(lè)不切換梧宫,但B頁(yè)面向C頁(yè)面跳轉(zhuǎn)需要進(jìn)行音樂(lè)切換的情況。
? 事先為A摆碉、B、C頁(yè)面分別引入AVFoundation框架脓豪,并在A頁(yè)面添加avcAudioPlayer巷帝、B頁(yè)面添加bvcAudioPlayer、C頁(yè)面添加bvcAudioPlayer和cvcAudioPlayer扫夜。
? 在A楞泼、B頁(yè)面viewDidLoad()為跳轉(zhuǎn)按鈕添加動(dòng)作:
turnButton.addTarget(self, action:"turn", forControlEvents: .TouchUpInside)
? 在A頁(yè)面添加turn方法 :
func turn(){
var sb = UIStoryboard(name: "Main", bundle:nil)
//使用Storyboard制作頁(yè)面使用此方法進(jìn)行跳轉(zhuǎn)
var bvc = sb.instantiateViewControllerWithIdentifier("B") as BViewController
bvc.bvcAudioPlayer = self.avcAudioPlayer
//頁(yè)面?zhèn)髦?/p>
self.presentViewController(bvc, animated: true, completion: nil)
//頁(yè)面跳轉(zhuǎn)
}
B頁(yè)面跳轉(zhuǎn)至C頁(yè)面(cvc)方法相同驰徊。
? 在C頁(yè)面對(duì)B頁(yè)面bvcaudioplayer是否播放進(jìn)行判斷并調(diào)用自己的背景音樂(lè)。
if (bvcAudioPlayer != nil)?{
bvcAudioPlayer.stop()
playBgMusic()
} else {
playBgMusic()
//需要提前為C頁(yè)面定義playBgMusic方法堕阔,播放器為cvcAudioPlayer
文/宅男小生(簡(jiǎn)書作者)
原文鏈接:http://www.reibang.com/p/b676e3c4358e著作權(quán)歸作者所有棍厂,轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),并標(biāo)注“簡(jiǎn)書作者”超陆。