iOS歌词处理

年前在做芬享艺术2.1.0版本的开发的时候,老大让我"顺便"把音乐模块的UI调一调.然后BUG给修了…

看了之前外包的代码(看顶上的注释是外包)完全是屎山…然后想了想自己实现了一份.

歌词解析部分

外包的歌词解析只注重了歌词的格式.而且是以字符串截取来做的.写了一堆判断…实在是.
而且没有判断作曲者啊之类的标签.如果没有标签(在之前的App上表现的是,如果标签不是时间标签),就崩溃…

1.下载歌词:

这里就不介绍了.我直接用AFN封装了一个下载类.然后和CoreData绑一块了(文件相对路径存储一下,使用的时候前部分自己拼接).

2.解析本地歌词
NSString *lyc = [NSString stringWithContentsOfFile:fileLyricURL encoding:NSUTF8StringEncoding error:nil];

通过文件路径来拿到lyc(歌词内容).这里我截个图看下歌词内容吧.

在这里插入图片描述

然后我们将歌词按\n分割为数组的形式

NSArray *lycArray = [lyc componentsSeparatedByString:@"\n"];

然后使用enumerateObjectsUsingBlock便利出数组的每一行.obj即为NSString类型的内容

[lycArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {

}];
3.歌词时间戳的处理

@"\\[\\d{1,2}\\:\\d{1,2}\\.\\d{1,2}\\]"这个是完整的分秒毫秒的正则(分钟可能超过两位数,1-XX可以自己规定)
@"\\[\\d{1,2}\\:\\d{1,2}\\]"这个是不包括毫秒的正则

1.创建正则,使用NSRegularExpression类
NSRegularExpression *regularExpressionFull = [NSRegularExpression regularExpressionWithPattern:@"正则表达式1" options:NSRegularExpressionCaseInsensitive error:nil];
NSRegularExpression *regularExpressionBreviary = [NSRegularExpression regularExpressionWithPattern:@"正则表达式2" options:NSRegularExpressionCaseInsensitive error:nil];

2.判断上面两种时间戳是否存在
if ([regularExpressionFull numberOfMatchesInString:obj options:0 range:NSMakeRange(0, ((NSString *)obj).length)] || [regularExpressionBreviary numberOfMatchesInString:obj options:0 range:NSMakeRange(0, ((NSString *)obj).length)]) {
/// 存在

} else {
	 NSString *str = (NSString *)obj;
     /// 替换掉标签,如:`[ar:]`替换为`艺人名:`
     str = [str stringByReplacingOccurrencesOfString:@"标签" withString:@"本地化文字"];
}

3. 在正则表达式内处理事件

NSRange minRange = [obj rangeOfString:@"\\[\\d{1,2}\\:" options:NSRegularExpressionSearch range:NSMakeRange(0, ((NSString *)obj).length)];
...这里省略...

不过要注意的是,在使用这个range的时候一定得判断一下:
minRange.location != NSNotFound(如果等于,那么就是不存在)

而且需要记录一下最后一个的下标.
然后截取剩余的部分.就得到歌词了.

3.歌词滚动的处理
[self.tableView scrollToRow:scrollRow inSection:0 atScrollPosition:UITableViewScrollPositionMiddle animated:YES];

有些人喜欢使用cell的highlit方法.有些人喜欢新添加属性.这都无伤大雅,记得要滚动到UITableView的中部位置就行UITableViewScrollPositionMiddle

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值