zoukankan      html  css  js  c++  java
  • 音乐播放器项目技术之一正在播放按钮点击

    一.效果图:

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

    二.实现方法及步骤

       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];
     
  • 相关阅读:
    sqlserver跨数据库查询数据
    sqlserver调用钉钉方法
    SQL Server判断对象是否存在
    再学一次C#(基本类型篇)
    .net core部署到centos官方文档的一点小问题
    C#字符串和byte之间的互相转化(转载出自:https://www.cnblogs.com/liangxiaoking/p/5958456.html)
    30分钟通过Kong实现.NET网关
    Envoy实现.NET架构的网关(五)集成Redis实现限流
    Envoy实现.NET架构的网关(四)集成IdentityServer4实现OAuth2认证
    Envoy实现.NET架构的网关(三)代理GRPC
  • 原文地址:https://www.cnblogs.com/erdeng/p/4895925.html
Copyright © 2011-2022 走看看