新浪微博项目技术之一正在播放按钮点击

一.效果图:

实现功能:在"正在播放"按钮时,切换到下一个界面并继续原歌曲的播放进度

二.实现方法及步骤

1.思路: 第一步.点击按钮事件中再show到下一个界面的时候,推出到我们创建的那个单例视图(前面已将第二个界面视图创建为单例对象)中

第二步.在点击页面播放的时候,如果当前播放为第四首歌曲,show的也是第四首的话,就不需要从头播放,继续当前位置播放即可,如果是下一首的话则需要从头播放(想清楚这个逻辑判断关系)

2.步骤:

第一步实现步骤:

@interface MusicListTableViewController ()
- (IBAction)didClickPlayingBarButton:(UIBarButtonItem *)sender;
@end
//点击按钮推到第二个单例对象视图页面
- (IBAction)didClickPlayingBarButton:(UIBarButtonItem *)sender {
    //获取单例对象方法
    MusicPlayerViewController *playVC = [MusicPlayerViewController shareMusicPlayVC];
    //show到下一个页面
    [self.navigationController showViewController:playVC sender:self];
}

第二步实现步骤:

在视图将要出现的方法中,进行判断.历史不放歌曲的线标与当前下标是否相同.如果相同继续当前歌曲播放,如果不同则重新播放.

1.声明一个属性存储播放歌曲的下标

@property(nonatomic,assign)NSInteger currentIndex;  //历史存储上一个(旧的)音乐歌曲的下标  用于临时保存播放歌曲
    //赋一个初值
    _currentIndex = -1;

2.在视图将要出现的页面进行判断

#pragma mark ---视图将要出现时 ,播放音乐
-(void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    //判断按钮点击的那首歌是否与当前相等
    if (_index == _currentIndex) {
        return;
    }
    [self prepareForPlaying];
}

注意:在这个判断中存在一个问题,如果播放第一首歌,下标index为0,那么_index = _currentIndex也相等,则就不会走开始播放的那个方法了,从而造成第一首个无法播放.

解决办法:

-(void)prepareForPlaying
{   //_currentIndex用于临时存储index播放歌曲,作为一个临时存储变量
   _currentIndex = _index;

    NSIndexPath * indexPath = [NSIndexPath indexPathForRow:_currentIndex inSection:0];
时间: 2024-08-01 19:34:06

新浪微博项目技术之一正在播放按钮点击的相关文章

新浪微博项目技术之一UI主框架搭建

一.项目整体框架搭建 二.UI主框架结构及知识点 1>.代码封装思想 封装前的代码:(四个标题需要重复写四次,重复代码较多) HomeViewController *HomeVC = [[HomeViewController alloc] init]; UINavigationController *HomeNV = [[UINavigationController alloc] initWithRootViewController:HomeVC]; //tabBarItem标题文字设置 Hom

新浪微博项目技术之一项目开发过程

一.项目开发完整流程图    1.项目总流程   2.项目需求分析形成文档    3. App制作流程 二.项目目录结构 目录结构 AppDelegate Models Macro General Helpers Vendors Sections Resources 一个合理的目录结构首先应该是清晰的,让人一眼看上去就能大概了解目录的职责,且容易应对新的变化. AppDelegate 这个目录下放的是AppDelegate.h(.m)文件,是整个应用的入口文件,所以单独拿出来. Models 这

新浪微博项目技术之一OAuth新浪授权

一.OAuth新浪授权 新浪授权用户登录界面过程: 1.注册一个新浪微博的账号,称为新浪的开发者 2.登录新浪微博开发者首页 http://open.weibo.com/  创建一个应用 3.填写应用名称 和 应用地址 https://www.baidu.com/ 4.创建完成之后,会获得以下主要信息:1>.AppKey (应用的唯一标识):323532662 2>.AppSerect:227sdgdfshgfdhfj1348752 3>.RedirectURL(回调地址,有默认值):h

新浪微博项目技术之一各种bug总结

1.模型存进沙盒,必须遵循<NSCoding>协议

NO4 系统移植-项目技术资料共享解决方案

系统移植项目-技术资料共享解决方案 前言 本文只做解决方案分析,不做具体技术点的说明 一:为什么需要技术资料的共享 系统移植项目的移植点可以分:(1)操作系统移植,例如:由window移植到linux上,由Aix移植到window上等,(2)程序语言的移植,例如vb6升级到vb.net,由PHP移植到Java上等,(3)后台数据库移植,例如:DB2移植到sql server,由sql server移植到Oracle上等. 一般的项目都是包含多个移植点,很少能有一个移植点的项目. 在项目过程中,操

(转).net项目技术选型总结

原文作者:mcgrady 原文地址:.net项目技术选型总结 做.net开发已经几年了,也参与开发了很多大大小小的项目,所以现在希望总结出一套开发.net项目的常用技术,也为以后做项目技术选型的时候作为参考. 数据库 小型项目:SQLite 中大型项目:MS SQL Server(国内) / Mysql(国外) 数据访问技术 SqlHelper(ADO.NET) 轻型ORM:Dapper / PetaPoco 大型ORM:EF / NHibernet 服务端技术 ASP.NET MVC WCF

使用CSS3实现的player播放按钮

完成的效果如下 查看效果并下载 Step 1:先了解border的原理: Step 2:HTML代码结构 Html代码   <section class="playContainer"> <li class="playBtn"> <a href="#" title="start">Start</a> </li> <li class="pauseBtn&

团队项目-技术概要

团队项目-技术概要 一.简述 1.1 概述 根据网站的需求,我们团队在经过网上调研比较之后,决定使用bootstrap作为前端开发框架,Django作为后端服务器开发框架.选用MySQL作为数据库.在开发阶段使用sqlite作为临时的数据库. 1.2 前端技术 我们团队选择了bootstrap v3.3.7作为前端框架.一方面由于其文档教程较为丰富,另一方面在于其社区活跃,使用的人多.遇到困难能够更轻松地解决. 1.3 后端技术 我们团队比较了基于Java的spring,基于python的web

按钮点击播放音效

1.引入音频管理文件 #import <AVFoundation/AVFoundation.h> 2.方法抽取 /************ 播放音效 *****************************/ - (void)playSoundEffect:(NSString *)name withType:(VoiceType)type { //播放扫描二维码的声音 SystemSoundID soundID; NSString *strSoundFile = [[NSBundle mai