IOS开发之——音乐播放器-播放器页面(05)

article/2025/10/3 22:46:06

一 概述

  • 播放器页面Storyboard
  • 点击列表Cell时,播放器页面show弹出
  • 播放器页面按钮对应的功能

二 播放器页面Storyboard

2.1 Storyboard界面

2.2 界面说明

  • 界面分类:顶部View和底部View两部分
  • 顶部View:歌曲大图、名字背景(歌曲名和歌手名)、拖拽进度、歌词显示控件(HMLrcView)、退出和图词切换按钮等
  • 底部View:播放控制面板(播放/暂停、上一首、下一首)、进度条(歌曲时长/播放进度)、滑块(拖动改变播放位置)

三 点击列表Cell时,播放器页面show弹出

3.1 HMPlayingViewController中show方法的作用

  • 点击Cell时会设置当前播放歌曲,判断正在播放的歌曲和Cell设置的是否是同一个
  • 设置播放器的frame和窗口的大小一致,并添加到窗口上
  • 执行动画,让播放器View从底部转出来
  • 动画执行完(播放器View展示出来后)播放歌曲

3.2 播放器中show代码

- (void)show {// 0.判断是否切换歌曲if (self.playingMusic != [HMMusicsTool returnPlayingMusic]) {// 重置数据[self resetPlayingMusic];}// 1.拿到windowUIWindow *window = [UIApplication sharedApplication].keyWindow;// 2.设置当前控制器的frame//self.view.y = window.bounds.size.height;self.view.frame = window.bounds;// 3.将当前控制器的View添加到window上[window addSubview:self.view];self.view.hidden = NO;// 禁用交互功能window.userInteractionEnabled = NO;// 4.执行动画,让控制器的View从下面转出来[UIView animateWithDuration:1 animations:^{// 执行动画self.view.y = 0;} completion:^(BOOL finished) {// 开启交互window.userInteractionEnabled = YES;// 开始播放[self startPlayingMusic];}];
}

3.3 列表Cell选中弹出播放器的方法(设置播放歌曲和show)

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{// 1.主动取消选中[tableView deselectRowAtIndexPath:indexPath animated:YES];// 2.执行segue跳转到播放界面,使用modal的方式打开,关闭控制器会销毁,无法继续播放音乐//    [self performSegueWithIdentifier:@"musics2playing" sender:nil];// 3.设置当前播放的音乐HMMusic *music = [HMMusicsTool musics][indexPath.row];[HMMusicsTool setPlayingMusic:music];// 自定义控制器,像modal的方式弹出控制器[self.playingVc show];}

四 播放器页面按钮对应的功能

4.1 进入播放器页面播放并设置歌曲信息

// 开始播放
- (void)startPlayingMusic
{// 执行动画完毕, 开始播放音乐// 1.取出当前正在播放的音乐模型HMMusic *music = [HMMusicsTool returnPlayingMusic];// 2.播放音乐self.player = [HMAudioTool playMusic:music.filename];self.player.delegate = self;// 记录当前正在播放的音乐self.playingMusic = [HMMusicsTool returnPlayingMusic];// 3.设置其他属性// 设置歌手self.singerLabel.text = music.singer;// 歌曲名称self.songLabel.text = music.name;// 背景大图self.iconView.image = [UIImage imageNamed:music.icon];// 设置总时长self.durationLabel.text = [self strWithTimeInterval:self.player.duration];// 4.开启定时器[self addProgressTimer];[self addLrcTimer];// 5.设置播放按钮状态self.playOrPauseButton.selected = YES;// 6.切换歌词(加载新的歌词)self.lrcView.lrcname = self.playingMusic.lrcname;// 7.切换锁屏界面的歌曲[self updateLockedScreenMusic];
}

4.2 点击Cell的歌曲跟正在播放的歌曲不是同一个,重置数据

// 重置数据
- (void)resetPlayingMusic {// 设置歌手self.singerLabel.text = nil;// 歌曲名称self.songLabel.text = nil;// 背景大图self.iconView.image = [UIImage imageNamed:@"play_cover_pic_bg"];
//    self.iconView.clipsToBounds = YES;// 超出部分减掉// 停止当前正在播放的歌曲[HMAudioTool stopMusic:self.playingMusic.filename];self.player = nil;// 设置播放按钮状态self.playOrPauseButton.selected = NO;
}

4.3 上一首歌曲previous

- (IBAction)previous {UIWindow *window = [[UIApplication sharedApplication].windows lastObject];window.userInteractionEnabled = NO;// 1.重置当前歌曲[self resetPlayingMusic];// 2.获得下一首歌曲[HMMusicsTool setPlayingMusic:[HMMusicsTool previouesMusic]];// 3.播放下一首[self startPlayingMusic];window.userInteractionEnabled = YES;
}

4.4 下一首歌曲next

- (IBAction)next {UIWindow *window = [[UIApplication sharedApplication].windows lastObject];window.userInteractionEnabled = NO;// 1.重置当前歌曲[self resetPlayingMusic];// 2.获得下一首歌曲[HMMusicsTool setPlayingMusic:[HMMusicsTool nextMusic]];// 3.播放下一首[self startPlayingMusic];window.userInteractionEnabled = YES;
}

4.5 暂停和播放按钮

- (IBAction)playOrPause {if (self.player.isPlaying) { // 暂停self.playOrPauseButton.selected = NO;[HMAudioTool pauseMusic:self.playingMusic.filename];[self removeProgressTimer];[self removeLrcTimer];} else { // 继续播放self.playOrPauseButton.selected = YES;[HMAudioTool playMusic:self.playingMusic.filename];[self addProgressTimer];[self addLrcTimer];// 更新锁屏信息[self updateLockedScreenMusic];}
}

4.6 其他-参考源代码

  • 播放进度监听
  • 歌词监听和更新
  • 滑块拖动监听
  • 播放完成之后下一首

五 参考

  • Github-参考代码
  • Xmind原图

http://chatgpt.dhexx.cn/article/EHM81S17.shtml

相关文章

西瓜视频 iOS 播放器技术重构

动手点关注 干货不迷路 👆 播放器简介 播放器是西瓜视频等视频类 App 最主要的业务场景,也是最主要的流量入口,其承载包括下层基础播放,上层的各种播放业务:状态栏、弹幕、音量、亮度、评论、点赞、进度、倍速、清晰度…

iOS系统自带的视频播放器

简述:MPMoviePlayerController,MPMoviePlayerViewController,AVPlayerViewController三种视频播放器的讲解1.MPMoviePlayerController效果:MPMoviePlayerController 密码: yam8MPMoviePlayerController&#xff0c;在MediaPlayer框架中 #import <MediaPlayer/MediaPlayer.h&…

iOS 超好用的本地视频播放器推荐!

本地播放器作为日常生活中不可或缺的一款工具类APP&#xff0c;Windows、Android等平台不乏一些功能与体验兼优的产品&#xff0c;但 iOS 平台的用户就没有那么幸运了&#xff0c;优秀的产品凤毛麟角&#xff0c;且多数收费。 这源于 iOS 平台的特殊性&#xff0c;完美支持各种…

iOS视频播放器之ZFPlayer剖析

1、引言 本文主要针对ZFPlayer的功能实现来剖析&#xff0c;以及总结一下大家遇到的问题和解决方案 首先ZFPlayer现在拥有的功能&#xff1a; 支持横、竖屏切换&#xff0c;在全屏播放模式下还可以锁定屏幕方向 支持本地视频、网络视频播放 支持在TableviewCell播放视频 左侧1/…

996程序员办公室猝死?公司:没死,继续上班了

程序员头条 报道 网传 996 程序员办公室猝死&#xff0c;公司回应&#xff1a;系因低血糖晕倒 日前&#xff0c;一则“996程序员办公室猝死”的视频在网络传播。根据视频显示&#xff0c;一名男子扶着办公桌栏短暂逗留之后&#xff0c;直挺挺的摔倒在地面。 事发后&#xff0c;…

网传京东37岁程序员在工位猝死。当事人:我还没死,还能加班!

编程牛人整理 近日微信群里疯传&#xff0c;一男子在工位突然倒地的图片与视频&#xff0c;随后&#xff0c;有自媒体称&#xff0c;这位倒地的员工系京东程序员疑似因常年夜班在工位猝死。 3月25日&#xff0c;网传消息称&#xff0c;该员工今年37岁&#xff0c;在加班过程中猝…

35岁程序员被公司辞退,生活压力太大痛哭,中年危机如何自救?

多数人都喜欢安逸的生活&#xff0c;尤其是随着年龄的增长&#xff0c;很多人都希望工作和生活趋于稳定&#xff0c;不愿意再让生活有很大的变动。可是&#xff0c;当达到一定的年龄时&#xff0c;危机还是存在的。 如今已经35岁的杰哥&#xff0c;是一个典型的理工男&#xf…

秒啊!程序员防猝死指南来了!

‍‍ 作者 | 咏春警告的胖虎 来源 | golang小白成长记&#xff08;ID&#xff1a;golangxbczj&#xff09; 过年之前&#xff0c;跟我可爱的小侄子通了个电话&#xff0c;上来就说&#xff0c;"叔叔你头发怎么变少了"&#xff0c;我很痛心&#xff0c;我的小侄子&…

程序员工作猝死给公司造成损失可以找其父母追讨吗?

从 996.icu 开始&#xff0c;996开始被热议&#xff0c;马巴巴说&#xff1a;“996 是福报”&#xff0c;东哥说&#xff1a;“81168”。然后 90 后乃至 00 后被推出来说&#xff1a;“这届真难带&#xff01;”。我一直认为网上有个段子说得好。  ☠ 月薪5W&#xff1a;996就…

程序员离职事件始末

吴小胖第10次推送 阅读时间预计3分钟~ 这是我毕业后的第一份工作... 面试时&#xff0c;HR小姐姐告诉我... 然鹅...我入职之后才发现&#xff1a; 对标阿里的只有加班强度 对标华为的只有狼性文化 对标百度的&#xff0c;额&#xff0c;没有对标百度 同事们有的住在海淀区、有的…

为什么程序猿996会猝死,而企业家007却不会?

想和吴小胖一起工作吗&#xff1f; 内推邮箱【shen_baili163.com】&#xff0c;响应P99非常小 其实&#xff0c;也可以关注公众号&#xff0c;不取关的那种哦 然后留言&#xff0c;我会主动联系你哟 后面还会继续更新Apache Dubbo源码分析和ElasticSearch的内容哦&#xff0c;大…

唉!一 28 岁程序员因新冠离世。。。

上一篇&#xff1a;为什么总是闹离职的员工没走&#xff0c;平时不吭声的员工却突然离职&#xff1f; 2022年12月19日&#xff0c;微信公众号万户楼台 发布《西安28岁程序员重症病危》的内容。 病人名字为郭晓桐&#xff08;94年生&#xff09;&#xff0c;年龄28岁。 其没有基…

成年人的崩溃只在一瞬间,程序员凌晨三点写的代码竟被女友删了...

对于恋爱中的情侣来说&#xff0c;吵架是很正常的事情&#xff0c;就算是再怎么亲密&#xff0c;也难免会出现意见不合的时候。 吵架不可怕&#xff0c;可怕的是&#xff0c;受吵架情绪的影响&#xff0c;做出一些比较“极端”的事情。 之前某社交平台上一位女生吐槽自己的男…

违法?猝死?你肯定不知道程序员还有这些“高危”操作

全文共2975字&#xff0c;预计学习时长9分钟 图源&#xff1a;百度 10月24日&#xff0c;一段“996程序员猝死在1024程序员节”的视频在各大IT群疯传。不久 “程序员猝死”的消息被搬上了热搜。 图源&#xff1a;微博 看毕&#xff0c;坐在电脑面前的程序员们觉得自己的心跳仿佛…

59% 的程序员曾担心自己猝死!

近期&#xff0c;接连发生的几起猝死事件引发人们的警觉&#xff0c;年轻人健康的话题成为大众持续关注的热点。 1月25日&#xff0c;丁香医生数据研究院发布了《2021国民健康洞察报告》&#xff08;以下简称“报告”&#xff09;&#xff0c;在56196个样本调查中&#xff0c;…

程序员防猝死!!!

自从踏上了这条路&#xff0c;我就早已把生死置之度外了。 如果我死了&#xff0c;只能证明我不过是如此程度的男人。 ​ -----------罗罗诺亚索隆 昨天&#xff0c;微信群里传苏宁程序员上班期间倒地猝死。 这种消息对本身就是程序员的我们&#xff0c;已经不是什么新闻了。…

又一程序员猝死...

声明&#xff1a;本文首发微信公众号【菜鸟要飞】&#xff0c;如有转载&#xff0c;请标明出处&#xff01; 今日在脉脉上看到了一篇不幸的消息&#xff1a;今日头条一名iOS开发猝死了。据网上消息说&#xff0c;此开发曾是腾讯OMG开发组长。 逝者为大&#xff0c;又是同行&am…

又一个程序员倒下-程序员防猝死指南

作者&#xff1a;蒋丽丽 http://news.html5tricks.com/programmer-life-health.html 程序员通常给人的感觉就是高智商、高收入、高压力群体。的确&#xff0c;对于程序员来说&#xff0c;加班可以说真的是家常便饭&#xff0c;虽说是工作8小时制&#xff0c;但是为了赶开发进度…

程序员防猝死指南——程序员养生攻略

程序员在其职业生涯中&#xff0c;健康问题尤为突出。但是大部分程序员只顾码字&#xff0c;却往往忽略了自身的健康问题。这或许是因为写代码太入神&#xff0c;也或许是因为来自老板的压力太大。但这些并不是你折磨自己最好的理由&#xff0c;我们程序员也需要养生&#xff0…

程序员写在猝死的前一天

作者&#xff1a;南喃自愈 今天是我猝死的前一天。 你一定会觉得&#xff0c;真奇怪&#xff0c;一个人怎么会知道自己什么时候猝死呢。 因为我昨晚做了一个梦&#xff0c;梦到一个白胡子老头儿&#xff0c;他说我的阳寿已尽&#xff0c;只剩下一天的寿命。怕我有什么心愿未了&…