因為有網友提出討論,所以就花了點時間研究了一下,順便練習把Objective-C的程式碼改寫成Swift,有需要的人可以參考一下喔!寫法上是有一些差異,但是應該看得懂,也比較好轉換回去Objective-C(因為比較熟咩~),如果是需要Objective-C的版本,可以參考「
相關文章」,本篇文章較之前多了監聽實體按鍵的部分。
接下來,只要Copy & Past(喂!沒個正經)就可以獲得一個可互動、調整系統音量的ScrollBar,以及一個當使用者按下機身左側的音量實體按鈕時,會跟著顯示當前音量數值的Label(ScrollBar本身就會跟著動,但是有時候我們會有心想把它隱藏起來XD)
介面安置
不過在這之前,我們需要先在storyboard上安置一個view以及一個label,然後與你的程式碼作連結,如下。
// Storyboard上的一些介面元素連結
@IBOutlet var mpVolumeViewParentView: UIView
@IBOutlet var volumeLabel: UILabel
加入Framework
在專案中加入兩個Framework:MediaPlayer.Framework以及AVFoundation.framework,並且匯入檔案,如下。
import MediaPlayer
import AVFoundation
音樂準備
將要播放的音樂拉進專案中,記得將copy的那個選項勾起來。(在完整程式碼中標示出的紅字,麻煩請改成此音樂的檔名跟檔案格式~)
以上就完成準備動作,接下來就不多說,直接來看完整的程式碼囉!
完整程式碼
import UIKit
import MediaPlayer
import AVFoundation
class ViewController: UIViewController {
// Storyboard上的一些介面元素連結
@IBOutlet var mpVolumeViewParentView: UIView
@IBOutlet var volumeLabel: UILabel
let volumeView = MPVolumeView()
var audioPlayer = AVAudioPlayer()
let musicPlayerController = MPMusicPlayerController()
override func viewDidLoad() {
super.viewDidLoad()
// 把volumeView實體顯示在舞台上設置的UIView(mpVolumeViewParentView)裡面,並且把大小設置成與其相同
mpVolumeViewParentView.backgroundColor = UIColor.clearColor();
volumeView.frame = mpVolumeViewParentView.bounds
mpVolumeViewParentView.addSubview(volumeView)
// 播放音樂
var music = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("UetoAya", ofType: "mp3"))
var error:NSError?
audioPlayer = AVAudioPlayer(contentsOfURL: music, error: &error)
audioPlayer.prepareToPlay()
audioPlayer.play()
// 監聽音量實體按鈕
NSNotificationCenter.defaultCenter().addObserver(self, selector: "getInstanceVolumeButtonNotification:", name:"AVSystemController_SystemVolumeDidChangeNotification", object: nil)
}
// 接收到音量改變處理
func getInstanceVolumeButtonNotification(notification: NSNotification) {
var info = notification.userInfo
var volume = info["AVSystemController_AudioVolumeNotificationParameter"] as NSValue
println("音量改變:\(volume)")
showCurrentVolumeText(volume)
}
// 顯示音量文字
func showCurrentVolumeText(currentVolume:NSValue) {
self.volumeLabel.text = "\(currentVolume)"
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
運作起來長這樣
外部參考資料/相關連結:
相關文章:
- [iOS] 調整系統音量(System Volume)_ Objective-C:link