学习记录
获取歌词的思路 :
歌词加载方法:
//此方法是通过路径拿到歌词将其取出
NSString *lrcPath(自己定义的字符串变量名) = [[NSBundle mainBundle]
pathForResource: 歌曲数组[索引] ofType:@"lrc"];//歌词格式
//此方法是将歌词的格式转换成Xcode支持的格式
NSString *contentStr = [NSString stringWithContentsOfFile:lrcPath
encoding:NSUTF8StringEncoding
error:nil];
//在此定义数组,将得到的歌词自字符串用"\n"分离存放到数组中
NSArray *array = [contentStr componentsSeparatedByString:@"\n"];
//这里通过循环函数将歌词的每一行读取出来(包括对应的时间)
for (int i = 0; i < [array count]; i++) {
//将存放到数组中的字符串赋值给linStr
NSString *linStr = [array objectAtIndex:i];
//这里将每一句进行分离存放
NSArray *lineArray = [linStr componentsSeparatedByString:@"]"];
if ([lineArray[0] length] > 8) {
//将符合条件的歌词和时间进行截取
NSString *str1 = [linStr substringWithRange:NSMakeRange(3, 1)];
NSString *str2 = [linStr substringWithRange:NSMakeRange(6, 1)];
//这里将截取的字符串进一步判断
if ([str1 isEqualToString:@":"] && [str2 isEqualToString:@"."]) {
//这里将符合条件的字符串进行分离并赋值
NSString *lrcStr = [lineArray objectAtIndex:1];
NSString *timeStr = [[lineArray objectAtIndex:0]
substringWithRange:NSMakeRange(1, 5)];
//最终目的将歌词和对应的时间分离然后存入定义的字典里
//把时间和歌词加入词典
[lrcDictionary setObject:lrcStr forKey:timeStr];
[timeArray addObject:timeStr];
}
}
}
这样做的目的是通过字典里来将歌词进行提取方便布局到TableView上显示;
//tabelview返回值
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:
(NSInteger)section {
//返回歌词对应的时间数组
return [timeArray count];
}
//tableview
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:
(NSIndexPath *)indexPath {
static NSString *lrcindetifier = @"lrcCell";
UITableViewCell *lrcCell = [tableView dequeueReusableCellWithIdentifier:lrcindetifier];
if (lrcCell == nil) {
lrcCell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:lrcindetifier];
}
lrcCell.selectionStyle = UITableViewCellSelectionStyleNone;
lrcCell.backgroundColor = [UIColor clearColor];
//判断行数与播放时间是否相同,相同就这样显示歌词
if (indexPath.row == lrcLineNumber) {
//这里将歌词通过字典取出并放到cell上显示
lrcCell.textLabel.text = lrcDictionary[timeArray[indexPath.row]];
//当前播放歌词的颜色
lrcCell.textLabel.textColor = [UIColor purpleColor];
//当前播放歌词的大小
lrcCell.textLabel.font = [UIFont systemFontOfSize:13];
lrcCell.textLabel.alpha = 1;
}else
{ //否则就以这种格式显示歌词
lrcCell.textLabel.text = lrcDictionary[timeArray[indexPath.row]];
lrcCell.textLabel.textColor = [UIColor whiteColor];
lrcCell.textLabel.font = [UIFont systemFontOfSize:12];
lrcCell.textLabel.alpha = 0.6;
}
lrcCell.textLabel.textAlignment = NSTextAlignmentCenter;
lrcCell.textLabel.backgroundColor = [UIColor clearColor];
return lrcCell;
}
这些代码很简单易懂,故不多做赘述
#pragma mark - 动态更新歌词
- (void)displaySongWord:(NSUInteger)time {
for (int i = 0; i < [timeArray count]; i++) {
//把时间转换成秒
NSArray *array = [timeArray[i] componentsSeparatedByString:@":"];
NSUInteger currentTime = [array[0] intValue] * 60 + [array[1] intValue];
if (i == [timeArray count]-1) {
//求最后一句歌词的时间点
NSArray *array1 = [timeArray[timeArray.count-1]
componentsSeparatedByString:@":"];
NSUInteger currentTime1 = [array1[0] intValue] * 60 + [array1[1]
intValue];
if (time > currentTime1) {
[self updateLrcTableView:i];
break;
}
} else {
//求出第一句的时间点,在第一句显示前的时间内一直加载第一句
NSArray *array2 = [timeArray[0]
componentsSeparatedByString:@":"];
NSUInteger currentTime2 = [array2[0] intValue] * 60 + [array2[1]
intValue];
if (time < currentTime2) {
[self updateLrcTableView:0];
break;
}
//求出下一步的歌词时间点,然后计算区间
NSArray *array3 = [timeArray[i+1]
componentsSeparatedByString:@":"];
NSUInteger currentTime3 = [array3[0] intValue] * 60 + [array3[1]
intValue];
if (time >= currentTime && time <= currentTime3) {
[self updateLrcTableView:i];
break;
}
}
}
}
以上的代码是别人的,我已经看过,感觉不错就记录下来了,在这里向作者致敬!
原文地址:http://www.cnblogs.com/liukunoeng/p/3726494.html