• 歌词加载学习笔记


    ios收获:ios中break语句的作用是跳过本层的for循环,而continue只是停止执行这一次循环,从而跳出这一次循环。就是继续执行之后的循环罢了。

    1、首先从本地解析歌词文件。Lrc歌词文件时间来确定定时播放的数据。

    通过

    NSString *LRCPath = [[NSBundle mainBundle] pathForResource:[musicArray[musicArrayNumber] name] ofType:@"lrc"];
        NSString *contentStr = [NSString stringWithContentsOfFile:LRCPath encoding:NSUTF8StringEncoding error:nil];
        NSArray *array = [contentStr componentsSeparatedByString:@" "];

    来解析数据,首先把所有的歌词文件加载到一个string中,然后通过通过相关的解码,来获得真实的数据,

    array使用"/n"换行。从而得到一行数据,将所有的数据加载到一个数组中。

    通过for循环遍历所有的数据,从而获得每一个数据来做相关的处理,根据歌词中的"]"字符串来分割相关的数据。

    从而将时间和数据分开。然后再将时间根据":"和"."来分割开来,载入先关的数据。time和lrcstr。。。

    - (NSString *)substringWithRange:(NSRange)aRange
    可以从不规则的字符串中取出自己需要的字符,并且可以通过组装来实现例如时间的解集

     通过这个格式来截取不规则格式的音频的时间。

    通过定时器来定时加载歌词,其中通过歌词的长度来判读需要执行的歌词跳转,

    //动态显示歌词
    -(void)displayLrc:(NSUInteger )timer
    {
    
        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 (timer>currentTime1) {
                [self updataLRC:i];
                                }
                break;
    #warning  这里有一个问题
               
            }else
            {
                //求出第一句的时间点,在第一句显示前的时间内一直加载第一句
                NSArray *array2 = [timeArray[0] componentsSeparatedByString:@":"];
                NSUInteger currentTime2 = [array2[0] intValue] * 60 + [array2[1] intValue];
                if (timer < currentTime2) {
    
                    [self updataLRC:0];
                    //                NSLog(@"马上到第一句");
                   break;
                }
            NSArray *array3 = [timeArray[i+1] componentsSeparatedByString:@":"];
             NSUInteger currentTime3 = [array3[0] intValue]*60 +[array3[1] intValue];
            if (timer >=currentTime && timer<=currentTime3) {
                [self updataLRC:i];
         break;
            }
        }
        }
    }
    //更新选中的代码。
    -(void)updataLRC:(NSUInteger)lineNumber { lrcLineNum = lineNumber; [centerTableView reloadData]; NSIndexPath *indexPath= [NSIndexPath indexPathForRow:lineNumber inSection:0 ]; NSLog(@"indexPath %@",indexPath); [centerTableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionNone]; }

    在tableview的datasorce方法中加载判断需要跳转的界面

    -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    {
        
        if (tags == 0) {
            
            return [timeArray count];
        }
        else if (tags ==1)
        {
            return [timeArray count];
        }
        
        return [timeArray count];
    }

    tags是绑定的全部变量,来判断点击事件触发的时候加载的是哪一个segment。

    从而来返回相关的tableview cell的个数。

    在tableview的datasorce方法 来实现动态加载歌词。

     1 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
     2 {
     3     static NSString* cellIndentify = @"LRCCell";
     4     UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:cellIndentify];
     5     if (cell ==nil) {
     6         cell  = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIndentify];
     7     }
     8     if (indexPath.row == lrcLineNum) {
     9 //        cell.textLabel.text = lrcDict[timeArray[indexPath]];
    10         cell.textLabel.text = lrcDict[timeArray[indexPath.row]];
    11         cell.textLabel.textColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:1.0];
    12         cell.textLabel.font = [UIFont systemFontOfSize:15];
    13     }else
    14     {
    15         cell.textLabel.text = lrcDict[timeArray[indexPath.row]];
    16         cell.textLabel.textColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.5];
    17         cell.textLabel.font = [UIFont systemFontOfSize:13];
    18     }
    19     cell.backgroundColor = [UIColor clearColor];
    20     return cell;
    21 }

    第一次写这么长的代码。好高兴。哈哈

    纸上得来终觉浅,绝知此事要躬行
  • 相关阅读:
    基于MATLAB静态目标分割的药板胶囊检测
    基于YCbCr色彩模型的简易肤色识别器
    思考一个问题STM32的
    压力校准仪开发日志-10-21 迪文屏通信命令记录
    迪文屏使用须知
    结构体变量字节填充
    sizeof 的妙用
    结构体内存的对齐方式
    内存对齐
    中国游戏产业走向世界
  • 原文地址:https://www.cnblogs.com/asheng/p/4372964.html
Copyright © 2020-2023  润新知