因為有網友提出討論,所以就花了點時間研究了一下,順便練習把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
沒有留言:
張貼留言