DFPlayer接入说明
原文请看:
https://ihoudf.github.io/2017/10/26/DFPlayer%E6%8E%A5%E5%85%A5%E8%AF%B4%E6%98%8E/
DFPlayer:关于iOS音频播放,传音频数据给我就好了🙃
If possible, please give me a star in github.✧(≖ ◡ ≖✿)🌹
github地址: https://github.com/ihoudf/DFPlayer
视频介绍: http://www.iqiyi.com/w_19ruzcqjqh.html
1 下载,并将DFPlayer文件夹添加(拖放)到工程
2 import "DFPlayer.h"
1 在 Podfile 中添加: pod 'DFPlayer'
2 执行 pod install 或 pod update
3 import "DFPlayer.h"
DFPLayer使用AFNetworkReachabilityManager进行网络监测,如正在使用AFNetworking,删除DFPlayer中的相关文件。
本次更新:
1 代码解耦
2 增加运行时断点续传
3 改用可扩展的状态码提示
4 播放模式为DFPlayerModeOnlyOnce时,增加下一首(上一首)按钮行为
5 优化歌词同步
6 其他逻辑优化
一.初始化DFPlayer,设置数据源(必须)
1 [[DFPlayer shareInstance] df_initPlayerWithUserId:nil];//初始化
2 [DFPlayer shareInstance].dataSource = self;//设置数据源
3 [[DFPlayer shareInstance] df_reloadData];//刷新数据源
二.实现数据源,将音频数据传给DFPlayer(必须)
1 //(必须)
2 - (NSArray<DFPlayerModel *> *)df_playerModelArray{
3 //在这里将音频数据传给DFPlayer
4 }
5 //(可选)
6 - (DFPlayerInfoModel *)df_playerAudioInfoModel:(DFPlayer *)player{
7 //DFPlayer收到某个音频的播放请求时,会调用这个方法请求该音频的音频名、歌手、专辑名、歌词、配图等信息。
8 }
三.选择AudioId对应的音频加入播放队列准备播放(必须)
1 [[DFPlayer shareInstance] df_playerPlayWithAudioId:audioId];
四.选择DFPLayer中提供的UI控件,布局到页面(可选)
DFPlayer封装了歌词tableview(提供逐句和逐字两种模式的基于Lrc的歌词同步)、缓冲条、进度条、播放暂停按钮、下一首按钮、上一首按钮、播放模式按钮(单曲、顺序、随机)、airplay按钮、当前时间Label、总时间Label。
你只需要:
(1)同名更换DFPlayer.bundle中的图片
(2)调用DFPlayerControlManager.h中暴露出来的方法,布局到自己的页面,即可实现相应的功能,无需其他代码。
1 //使用示例:
2 DFPlayerControlManager *manager = [DFPlayerControlManager shareInstance];
3 //播放暂停按钮
4 [manager df_playPauseBtnWithFrame:frame2 superView:superView block:nil];
5 //下一首按钮
6 [manager df_nextAudioBtnWithFrame:frame3 superView:superView block:nil];
7 //上一首按钮
8 [manager df_lastAudioBtnWithFrame:frame4 superView:superView block:nil];
9 ...等,详细查看‘详细文档’。
你一定会用到:
你可能会用到:
3、DFPlayerControlManager.h(UI控件类)
-
1.
2.#pragma mark - 初始化和操作
3./**单例方法*/
4.+ (DFPlayer *)shareInstance;
5./**
6.初始化播放器
@param userId 用户唯一Id。
isNeedCache(默认YES)为YES时,若同一设备登录不同账号:
1.userId存在时,DFPlayer将为每位用户建立不同的缓存文件目录。例如,user_001,user_002...
2.userId为nil或@""时,统一使用DFPlayerCache文件夹下的user_public文件夹作为缓存目录。
isNeedCache为NO时,userId设置无效,此时不会在沙盒创建缓存目录
*/
- (void)df_initPlayerWithUserId:(NSString*)userId;
/**刷新数据源数据*/
- (void)df_reloadData;
/**
选择audioId对应的音频开始播放。
说明:DFPlayer通过数据源方法提前获取数据,通过df_playerPlayWithAudioId选择对应音频播放。
而在删除、增加音频后需要调用[[DFPlayer shareInstance] df_reloadData];刷新数据。
DFPlayer内部实现里做了线程优化,合理范围内的大数据量也毫无压力。
*/
- (void)df_playerPlayWithAudioId:(NSUInteger)audioId;
/**播放*/
- (void)df_audioPlay;
/**暂停*/
- (void)df_audioPause;
/**下一首*/
- (void)df_audioNext;
/**上一首*/
- (void)df_audioLast;
/**
设置历史播放信息
(在合适的时机,调用该方法,将会在本地记录音频URL、当前播放到的时间、音频总时长、播放进度,以供下次继续播放)
@return 是否保存成功
*/
- (BOOL)df_setPreviousAudioModel;
/**
用历史播放信息配置播放器(数据源中要有该条音频的URL才能配置哦)
@return 是否配置成功
*/
- (BOOL)df_setPlayerWithPreviousAudioModel;
/**释放播放器,还原其他播放器*/
- (void)df_deallocPlayer;
/**实现远程线控功能,需替换main.m中UIApplicationMain函数的第三个参数。*/
- (NSString*)df_remoteControlClass;
/**音频跳转,value:时间百分比*/
- (void)df_seekToTimeWithValue:(CGFloat)value;
-
//播放器类别
typedefNS_ENUM(NSInteger,DFPlayerAudioSessionCategory){
//用于播放。随静音键和屏幕关闭而静音。不终止其它应用播放声音
DFPlayerAudioSessionCategoryAmbient,
//用于播放。随静音键和屏幕关闭而静音。终止其它应用播放声音
DFPlayerAudioSessionCategorySoloAmbient,
//用于播放。不随静音键和屏幕关闭而静音。终止其它应用播放声音
//需要在工程里设置targets->capabilities->选择backgrounds modes->勾选audio,airplay,and picture in picture
DFPlayerAudioSessionCategoryPlayback,
//用于播放和录音。不随着静音键和屏幕关闭而静音。终止其他应用播放声音
DFPlayerAudioSessionCategoryPlayAndRecord,
//用于播放和录音。不随着静音键和屏幕关闭而静音。可多设备输出
DFPlayerAudioSessionCategoryMultiRoute
};
//播放模式
typedefNS_ENUM(NSInteger, DFPlayerMode){
DFPlayerModeOnlyOnce,//单曲只播放一次
DFPlayerModeSingleCycle,//单曲循环。默认。
DFPlayerModeOrderCycle,//顺序循环
DFPlayerModeShuffleCycle//随机循环
};
@property(nonatomic,weak)id delegate;
@property(nonatomic,weak)id dataSource;
#pragma mark - 设置类
/**播放器类型,默认DFPlayerAudioSessionCategorySoloAmbient*/
@property(nonatomic,assign) DFPlayerAudioSessionCategory category;
/**
播放模式,首次默认DFPlayerModeSingleCycle。设置播放模式后,DFPlayer将为您记录用户的选择。
如需每次启动都设置固定某一个播放模式,请在初始化播放器后,调用[DFPlayer shareInstance].playMode = XX;重置播放模式。
*/
@property(nonatomic,assign) DFPlayerMode playMode;
/**是否监听播放进度,默认YES*/
@property(nonatomic,assign)BOOLisObserveProgress;
/**是否监听缓冲进度,默认YES*/
@property(nonatomic,assign)BOOLisObserveBufferProgress;
/**是否需要缓存,默认YES*/
@property(nonatomic,assign)BOOLisNeedCache;
/**是否需要耳机线控功能,默认YES*/
@property(nonatomic,assign)BOOLisRemoteControl;
/**
DFPlayerModeOnlyOnce(单曲只播放一次)模式下,
点击下一首(上一首)按钮(或使用线控播放下一首、上一首),
YES则播放下一首(上一首),NO则无响应。
DFPlayerModeSingleCycle(单曲循环)模式下,
点击下一首(上一首)按钮(或使用线控播放下一首、上一首)是重新开始播放当前音频还是播放下一首(上一首),
移动版QQ音乐是播放下一首(上一首),PC版QQ音乐是重新开始播放当前音频
DFPlayer默认YES,即采用移动版QQ音乐设置。NO则重新开始播放当前音频
*/
@property(nonatomic,assign)BOOLisManualToPlay;
/**
当currentAudioModel存在时,是否插入耳机音频自动恢复播放,默认NO
当您没有实现代理8的情况下,DFPlayer默认拨出耳机音频自动停止,插入耳机音频不会自动恢复。你可通过此属性控制插入耳机时音频是否可自动恢复
当您实现代理8时,耳机插入拔出时的播放暂停逻辑由您处理。
*/
@property(nonatomic,assign)BOOLisHeadPhoneAutoPlay;
/**
是否监测WWAN无线广域网(2g/3g/4g),默认NO。
播放本地音频(工程目录和沙盒文件)不监测。
播放网络音频时,DFPlayer为您实现wifi下自动播放,无网络有缓存播放缓存,无网络无缓存返回无网络错误码。
基于播放器具有循环播放的功能,开启该属性,无线广域网(WWAN)网络状态通过代理6返回错误码1。
*/
@property(nonatomic,assign)BOOLisObserveWWAN;
/**
是否监听服务器文件修改时间,默认NO。
在播放网络音频且需要DFPlayer的缓存功能的情况下,开启该属性,不必频繁更换服务端文件名来更新客户端播放内容。
比如,你的服务器上有audioname.mp3资源,若更改音频内容而需重新上传音频时,您不必更改文件名以保证客户端获取最新资源,本属性为YES即可完成。
第一次请求某资源时,DFPlayer缓存文件的同时会记录文件在服务器端的修改时间。
开启该属性,以后播放该资源时,DFPlayer会判断服务端文件是否修改过,修改过则加载新资源,没有修改过则播放缓存文件。
关闭此属性,有缓存时将直接播放缓存,不做更新校验,在弱网环境下播放响应速度更快。但您可自行实现每隔多少天或在哪一天检测的逻辑。
无网络连接时,有缓存直接播放缓存文件。
*/
@property(nonatomic,assign)BOOLisObserveFileModifiedTime;
-
@protocolDFPlayerDataSource
@required
/**
数据源1:音频model数组
*/
- (NSArray *)df_playerModelArray;
@optional
/**
数据源2:音频信息model
当DFPlayer收到播放请求时,会调用此方法请求当前音频的信息
根据player.currentAudioModel.audioId获取音频在数组中的位置,返回对应的音频信息model
@param player DFPlayer音频播放管理器
*/
- (DFPlayerInfoModel *)df_playerAudioInfoModel:(DFPlayer *)player;
@end
@protocolDFPlayerDelegate
@optional
/**
代理1:音频将要加入播放队列
@param player DFPlayer音频播放管理器
*/
- (void)df_playerAudioWillAddToPlayQueue:(DFPlayer *)player;
/**
代理2:准备播放
@param player DFPlayer音频播放管理器
*/
- (void)df_playerReadyToPlay:(DFPlayer *)player;
/**
代理3:缓冲进度代理 (属性isObserveBufferProgress(默认YES)为YES时有效)
@param player DFPlayer音频播放管理器
@param bufferProgress 缓冲进度
@param totalTime 音频总时长
*/
- (void)df_player:(DFPlayer *)player
bufferProgress:(CGFloat)bufferProgress
totalTime:(CGFloat)totalTime;
/**
代理4:播放进度代理 (属性isObserveProgress(默认YES)为YES时有效)
@param player DFPlayer音频播放管理器
@param progress 播放进度
@param currentTime 当前播放到的时间
@param totalTime 音频总时长
*/
- (void)df_player:(DFPlayer *)player
progress:(CGFloat)progress
currentTime:(CGFloat)currentTime
totalTime:(CGFloat)totalTime;
/**
代理5:播放结束代理
@param player FPlayer音频播放管理器
*/
- (void)df_playerDidPlayToEndTime:(DFPlayer *)player;
/**
代理6:播放状态码代理
@param player DFPlayer音频播放管理器
@param statusCode 状态码
*/
- (void)df_player:(DFPlayer *)player didGetStatusCode:(DFPlayerStatusCode)statusCode;
/**
代理7:播放器被系统打断代理
(DFPlayer默认被系统打断暂停播放,打断结束检测能够播放则恢复播放,如果实现此代理,打断逻辑由您处理)
@param player DFPlayer音频播放管理器
@param isInterrupted YES:被系统打断开始 NO:被系统打断结束
*/
- (void)df_player:(DFPlayer *)player isInterrupted:(BOOL)isInterrupted;
/**
代理8:监听耳机插入拔出代理
@param player DFPlayer音频播放管理器
@param isHeadphone YES:插入 NO:拔出
*/
- (void)df_player:(DFPlayer *)player isHeadphone:(BOOL)isHeadphone;
@end
-
//状态码
typedefNS_ENUM(NSUInteger, DFPlayerStatusCode) {
DFPlayerStatus_NetworkUnavailable =0,//没有网络连接(注意:对于未缓存的网络音频,点击播放时若无网络会返回该状态码,播放时若无网络也会返回该状态码哦。DFPlayer支持运行时断点续传,即缓冲时网络从无到有,可以断点续传,而某音频没缓冲完就退出app,再进入app没做断点续传,以上特点与QQ音乐一致)
DFPlayerStatus_NetworkViaWWAN =1,//WWAN网络状态(注意:属性isObserveWWAN(默认NO)为YES时,对于未缓存的网络音频,只在点击该音频时返回该状态码。而音频正在缓冲时,网络状态由wifi到wwan并不会返回该状态码,以上特点与QQ音乐一致)
DFPlayerStatus_RequestTimeOut =2,//音频请求超时
DFPlayerStatus_UnavailableData =3,//无法获得该音频资源
DFPlayerStatus_UnavailableURL =4,//无效的URL地址
DFPlayerStatus_PlayError =5,//音频无法播放
DFPlayerStatus_DataError =6,//点击的音频ID不在当前数据源里(即数组越界)
DFPlayerStatus_CacheFailure =7,//当前音频缓存失败
DFPlayerStatus_CacheSuccess =8,//当前音频缓存完成
DFPlayerStatus_SetPreviousAudioModelError =9,//配置历史音频信息失败
DFPlayerStatus_UnknownError =100,//未知错误
};
//播放器状态
typedefNS_ENUM(NSInteger, DFPlayerState) {
DFPlayerStateFailed,// 播放失败
DFPlayerStateBuffering,// 缓冲中
DFPlayerStatePlaying,// 播放中
DFPlayerStatePause,// 暂停播放
DFPlayerStateStopped// 停止播放
};
#pragma mark - 状态类
/**播放器状态*/
@property(nonatomic,readonly,assign) DFPlayerState state;
/**当前正在播放的音频model*/
@property(nonatomic,readonly,strong) DFPlayerModel *currentAudioModel;
/**当前正在播放的音频信息model*/
@property(nonatomic,readonly,strong) DFPlayerInfoModel *currentAudioInfoModel;
/**当前音频缓冲进度*/
@property(nonatomic,readonly,assign)CGFloatbufferProgress;
/**当前音频播放进度*/
@property(nonatomic,readonly,assign)CGFloatprogress;
/**当前音频当前时间*/
@property(nonatomic,readonly,assign)CGFloatcurrentTime;
/**当前音频总时长*/
@property(nonatomic,readonly,assign)CGFloattotalTime;
/**上次播放的音频信息。(本地音频或网络音频已缓存时有效)*/
@property(nonatomic,readonly,strong) DFPlayerPreviousAudioModel *previousAudioModel;
-
/**
url对应音频是否已经在本地缓存
@param url 网络音频url
@return 有缓存返回缓存地址,无缓存返回nil
*/
+ (NSString *)df_playerCheckIsCachedWithAudioUrl:(NSURL *)url;
/**
清除url对应的本地缓存
@param url 网络音频url
@param block 是否清除成功 错误信息
*/
+ (void)df_playerClearCacheWithAudioUrl:(NSURL *)url
block:(void(^)(BOOL isSuccess, NSError *error))block;
/**
清除DFPlayer产生的缓存
@param isClearCurrentUser YES:清除当前用户缓存 NO:清除所有用户缓存
@param block 是否清除成功 错误信息
*/
+ (void)df_playerClearCacheForCurrentUser:(BOOL)isClearCurrentUser
block:(void(^)(BOOL isSuccess, NSError *error))block;
/**
计算DFPlayer的缓存大小
@param isCurrentUser YES:计算当前用户缓存大小 NO:计算所有用户缓存大小
@return 大小
*/
+ (CGFloat)df_playerCountCacheSizeForCurrentUser:(BOOL)isCurrentUser;
/**
计算系统磁盘空间 剩余可用空间
@param block totalSize:总空间 freeSize:剩余空间
*/
+ (void)df_countSystemSizeBlock:(void(^)(CGFloat totalSize,CGFloat freeSize))block;
-
/**
数据model类(必传属性) - IMPORTANT
*/
@interfaceDFPlayerModel:NSObject
/**音频Id。从0开始,仅标识当前音频在数组中的位置*/
@property(nonatomic,assign)NSUIntegeraudioId;
/**音频地址*/
@property(nonatomic,nonnull,strong)NSURL*audioUrl;
@end
/**
音频信息model类(非必传属性)
*/
@interfaceDFPlayerInfoModel:NSObject
/**歌词*/
@property(nonatomic,nullable,copy)NSString*audioLyric;
/*正确传入以下属性时,DFPlayer将自动设置锁屏模式和控制中心的播放信息展示*/
/**音频名*/
@property(nonatomic,nullable,copy)NSString*audioName;
/**专辑名*/
@property(nonatomic,nullable,copy)NSString*audioAlbum;
/**歌手名*/
@property(nonatomic,nullable,copy)NSString*audioSinger;
/**音频配图*/
@property(nonatomic,nullable,copy)UIImage*audioImage;
@end
/**
此model用于获取上次播放的音频信息
*/
@interfaceDFPlayerPreviousAudioModel:NSObject
/**网络音频地址或本地音频名*/
@property(nonatomic,readonly,nonnull,copy)NSString*audioUrlAbsoluteString;
/**音频总时长*/
@property(nonatomic,readonly,assign)CGFloattotalTime;
/**以下属性只有缓存过或者本地音频才会配置该属性 */
/**音频当前播放到的时间*/
@property(nonatomic,readonly,assign)CGFloatcurrentTime;
/**音频播放进度*/
@property(nonatomic,readonly,assign)CGFloatprogress;
@end
-
/**
DFPlayer控制管理器
*/
@interfaceDFPlayerControlManager:NSObject
/**单利方法*/
+ (DFPlayerControlManager *_Nullable)shareInstance;
/**调用该方法将停止更新与进度相关的UI控件(除了歌词tableview)的刷新*/
- (void)df_stopUpdateProgress;
/**调用该方法将恢复更新与进度相关的UI控件(除了歌词tableview)的刷新*/
- (void)df_resumeUpdateProgress;
/**(下面的方法可以显示出airplay按钮,若完善airplay功能需要用到私有API,故不建议使用)
AirPlay按钮(背景图片在DFPlayer.bundle中同名替换相应的图片即可)
airplay按钮是系统按钮,当系统检测到airplay可用时才会显示。
@param frame AirPlay按钮 frame
@param backgroundColor 背景颜色
@param superView AirPlayView父视图
@return AirPlayView
*/
- (UIView*_Nullable)df_airPlayViewWithFrame:(CGRect)frame
backgroundColor:(UIColor*_Nonnull)backgroundColor
superView:(UIView*_Nonnull)superView;
/**
播放暂停按钮(背景图片在DFPlayer.bundle中同名替换相应的图片即可)
@param frame 按钮frame
@param superView 按钮父视图
@param block 按钮action 若无其他操作需求,传nil即可
@return 播放暂停按钮
*/
- (UIButton*_Nullable)df_playPauseBtnWithFrame:(CGRect)frame
superView:(UIView*_Nonnull)superView
block:(void(^_Nullable)(void))block;
/**
上一首按钮(背景图片在DFPlayer.bundle中同名替换相应的图片即可)
@param frame 按钮frame
@param superView 按钮父视图
@param block 按钮action 若无其他操作需求,传nil即可
@return 上一首按钮
*/
- (UIButton*_Nullable)df_lastAudioBtnWithFrame:(CGRect)frame
superView:(UIView*_Nonnull)superView
block:(void(^_Nullable)(void))block;
/**
下一首按钮(背景图片在DFPlayer.bundle中同名替换相应的图片即可)
@param frame 按钮frame
@param superView 按钮父视图
@param block 按钮action 若无其他操作需求,传nil即可
@return 下一首按钮
*/
- (UIButton*_Nullable)df_nextAudioBtnWithFrame:(CGRect)frame
superView:(UIView*_Nonnull)superView
block:(void(^_Nullable)(void))block;
/**
播放模式按钮(单曲循环,顺序循环,随机循环) (DFPlayerMode为DFPlayerModeOnlyOnce时此按钮会隐藏)
@param frame 按钮frame
@param superView 按钮父视图
@param block 按钮action 若无其他操作需求,传nil即可
@return 播放模式设置按钮
* 注意:当设置了DFPlayer的播放模式以后,DFPlayer将为您记录用户的选择,并在下次启动app时选择用户设置的播放模式。
如需每次启动都设置固定某一个播放模式,请在初始化播放器后,调用[DFPlayer shareInstance].playMode = XX;重置播放模式。
*/
- (UIButton*_Nullable)df_typeControlBtnWithFrame:(CGRect)frame
superView:(UIView*_Nonnull)superView
block:(void(^_Nullable)(void))block;
/**
缓冲进度条
@param frame frame
@param trackTintColor 未缓冲部分进度条颜色
@param progressTintColor 已缓冲部分进度条颜色
@param superView 进度条父视图
@return 进度条
*/
- (UIProgressView*_Nullable)df_bufferProgressViewWithFrame:(CGRect)frame
trackTintColor:(UIColor*_Nonnull)trackTintColor
progressTintColor:(UIColor*_Nonnull)progressTintColor
superView:(UIView*_Nonnull)superView;
/**
播放进度条
@param frame frame
@param minimumTrackTintColor 滑块左边滑动条的颜色
@param maximumTrackTintColor 滑块右边滑动条的颜色
@param trackHeight 滑动条的高度(长度采用frame的width)
@param thumbSize 滑块的大小
@param superView 进度条父视图
@return 进度条
*/
- (UISlider*_Nullable)df_sliderWithFrame:(CGRect)frame
minimumTrackTintColor:(UIColor*_Nonnull)minimumTrackTintColor
maximumTrackTintColor:(UIColor*_Nonnull)maximumTrackTintColor
trackHeight:(CGFloat)trackHeight
thumbSize:(CGSize)thumbSize
superView:(UIView*_Nonnull)superView;
/**
音频当前时间label
@param frame frame
@param superView label父视图
@return label
*/
- (UILabel*_Nullable)df_currentTimeLabelWithFrame:(CGRect)frame
superView:(UIView*_Nonnull)superView;
/**
音频总时长label
@param frame frame
@param superView label父视图
@return label
*/
- (UILabel*_Nullable)df_totalTimeLabelWithFrame:(CGRect)frame
superView:(UIView*_Nonnull)superView;
#pragma mark - 歌词tableView相关
/**
lyricTableview
①采用lrc标准格式编写,即"[00:00.00]歌词" 或 "[00:00]歌词" 或 "[00:00:00]歌词"
②根据lrc歌词软件开发标准,凡具有“[*:*]”形式的都应认为是标签(注意:其中的冒号并非全角字符“:”)。凡是标签都不应显示。
③支持单句歌词多个时间的格式,如“[00:10.00][00:50.00][00:70.00]歌词”
④lrc歌词文件单行只有时间标签,没有歌词内容的,将被认作为上一个相邻时间内歌词的结束时间,并不做空行显示处理。比如
[00:11.11]歌词
[00:22.22] (22秒22毫米,该时间下无歌词显示,将被认作为上一个相邻时间歌词的演唱结束时间,此处的相邻不是位置的相邻,而是时间大小的相邻)
⑤如果歌词中需要空行,DFPlayer默认时间标签后的“####”是空行标志,如“[00:11.11]####”,DFPlayer将在解析到歌词为####时做空行显示
详情查看demo中”许嵩(Vae)-有何不可.lrc“文件
⑥DFPlayer认为每个时间标签都是一个单元格。只不过时间标签后无歌词时,DFPlayer将该单元格隐藏。
⑦DFPlayer不对单句歌词做换行处理,所以单行歌词长度尽量不要超过tableview的宽度,当超出时,DFPlayer用末尾省略号处理。
@param frame tableview frame
@param contentInset tableview contentInset
@param cellRowHeight tableview 单行rowHeight
@param cellBackgroundColor cell背景色
@param currentLineLrcForegroundTextColor 当前行歌词文字前景色(此属性不为nil时,采用卡拉OK模式显示)
@param currentLineLrcBackgroundTextColor 当前行歌词文字背景色
@param otherLineLrcBackgroundTextColor 其他行歌词文字颜色
@param currentLineLrcFont 当前行歌词字体
@param otherLineLrcFont 其他行歌词字体
@param superView 父视图
@param clickBlock 点击某个歌词cell。indexpath:该行cell的indexpath
@return 歌词tableView
*/
- (UITableView*_Nullable)df_lyricTableViewWithFrame:(CGRect)frame
contentInset:(UIEdgeInsets)contentInset
cellRowHeight:(CGFloat)cellRowHeight
cellBackgroundColor:(UIColor*_Nullable)cellBackgroundColor
currentLineLrcForegroundTextColor:(UIColor*_Nullable)currentLineLrcForegroundTextColor
currentLineLrcBackgroundTextColor:(UIColor*_Nonnull)currentLineLrcBackgroundTextColor
otherLineLrcBackgroundTextColor:(UIColor*_Nonnull)otherLineLrcBackgroundTextColor
currentLineLrcFont:(UIFont*_Nonnull)currentLineLrcFont
otherLineLrcFont:(UIFont*_Nonnull)otherLineLrcFont
superView:(UIView*_Nonnull)superView
clickBlock:(void(^_Nullable)(NSIndexPath* _Nullable indexpath))clickBlock;
/**DFPlayer不管理lyricTableview中歌词更新的暂停和恢复*/
/**停止更新lyricTableview中歌词的刷新*/
- (void)df_playerLyricTableviewStopUpdate;
/**恢复更新lyricTableview中歌词的刷新*/
- (void)df_playerLyricTableviewResumeUpdate;
@end