iOS开发之如何用UITableView实时显示歌词

前一段时间一直在捣鼓做一个网络音乐播放器,已经实现了基本功能,能加载网络上专辑图片、歌曲和歌词,能播放、暂停、上一曲、下一曲,能选歌播放。现在想要加入显示歌词的功能,上网查了一下资料,大家都是用UITableView来显示歌词的,自己试着整一下,下面来分享一下我的成果!


先说一下思路:

1、将歌词中的内容解析出来,时间点和歌词内容要存储到一个存放歌词信息的类中。

2、建立UITableView,一行歌词一行cell(前面解析歌词时可以知道总共有多少行歌词)。

3、根据音乐播放的进度调整显示哪一行,给当前显示的cell添加一个小动画,增强用户体验。


这里为了方便,直接从storyboard拉一个UITableView,再拉一个cell,拉一个label,拉两个button,如图1所示:


图1

这里的cell是自定义cell,label是放到cell中铺满整个cell,因为歌词显示一行一个cell,cell只显示label,这样歌词的行距就一样了。自定义cell要设置identifier,这里设置为lrcCell,如图2所示:



图2


为UITableView新建一个class,名字为SCTableView,这个类封装了歌词解析(歌词格式如图3所示)和歌词显示的方法,其中代码如下:

//
//  SCTableView.swift
//  playerTest4
//
//  Created by 凌       陈 on 7/15/17.
//  Copyright © 2017 凌       陈. All rights reserved.
//

import UIKit

class SCTableView: UITableView, UITableViewDelegate , UITableViewDataSource{
    
    var mCurrentSongIndex = 0
    var mUpdateTimer : Timer?

    var mLRCDictinary : [String : String] = [String : String]()
    var mTimeArray : [String] = [String]()
    var mIsLRCPrepared : Bool = false
    var mLineNumber : Int = -1
    
    var currentCell : SCLrcCell?
    
    var lrcOldCell : SCLrcCell?
    
    var old_Index : Int = 0
    
    
    var lrcProgress : CGFloat = 0.0{
        
        didSet{
            
            if currentCell != nil {
                
                autoUpdateLrc()
                
            }
        }
        
    }
    
    // 设置歌词index,显示哪一行
    var Lrc_Index : Int = 0 {
        
        didSet{
            
            if Lrc_Index == oldValue {
                return
            }
            
            // 滚动到指定index的位置
            // 新的indexPath
            let indexPath = NSIndexPath(row: Lrc_Index, section: 0  )
            self.scrollToRow(at: indexPath as IndexPath, at: .middle, animated: true)
            currentCell = self.cellForRow(at: indexPath as IndexPath) as? SCLrcCell
            currentCell?.mTitleLable.text
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值