Swift - 歌曲播放样例(附带播放时间和播放进度)

使用MPMoviePlayerController我们可以是进行音乐播放,下面是一个播放器样例。同时,播放时还可以显示播放时间和播放进度。


 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
import UIKit
import MediaPlayer
 
class ViewController: UIViewController {
     
    //申明一个媒体播放控件
    var audioPlayer:MPMoviePlayerController=MPMoviePlayerController();
    //申明一个计时器
    var timer:NSTimer?
     
    //ProgressView控件 播放进度条
    @IBOutlet weak var progressView: UIProgressView!
    //Label控件 播放时间
    @IBOutlet weak var playTime: UILabel!   
 
    override func viewDidLoad() {
        super.viewDidLoad()
         
        onSetAudio("http://hangge.com/file/music.mp3")
    }
 
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
     
    //播放歌曲
    func onSetAudio(url:String){
        //暂停当前歌曲的播放
        self.audioPlayer.stop()
        //获取歌曲文件
        self.audioPlayer.contentURL=NSURL(string:url)
        //播放歌曲
        self.audioPlayer.play()
        //先停掉计时器
        timer?.invalidate()
        //将计时器归零
        playTime!.text="00:00"
        //开启计时器
        timer=NSTimer.scheduledTimerWithTimeInterval(0.4, target: self,
            selector: "onUpdate", userInfo: nil, repeats: true)
    }
     
    //计时器更新方法
    func onUpdate(){
        //返回播放器当前的播放时间
        let c=audioPlayer.currentPlaybackTime
        if c>0.0 {
            //歌曲的总时间
            let t=audioPlayer.duration
            //歌曲播放的百分比
            let p:CFloat=CFloat(c/t)
            //通过百分比设置进度条
            progressView!.setProgress(p, animated: true)
             
            //一个小算法,来实现00:00这种格式的播放时间
            let all:Int=Int(c)
            let m:Int=all % 60
            let f:Int=Int(all/60)
            var time:String=""
            if f<10{
                time="0\(f):"
            }else {
                time="\(f)"
            }
            if m<10{
                time+="0\(m)"
            }else {
                time+="\(m)"
            }
            //更新播放时间
            playTime!.text=time
        }
    }
}
posted @   brave-sailor  阅读(389)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
历史上的今天:
2014-09-26 android在广播接收器BroadcastReceiver里面再进行发送广播,造成当前广播接收器不断循环执行问题
点击右上角即可分享
微信分享提示