我正在创建录音应用程序,就像语音备忘录一样。到目前为止,我能够录制,播放,修剪和合并音频。我创建波浪条的时间线就像任何音乐应用中的条形可视化一样。
当用户停止录音时,如果他出错,他可以回到特定的秒钟再次从那里录制。例如,如果他在50秒后停止录音,因为他在45秒后犯了错误。他将拖动水平滚动条(时间轴)到45秒。当他点击录制按钮时,我想在45秒后清除所有波浪条。我该如何实现这一目标?这就是我使用CAShapeLayer
在scrollview中创建波浪的方法。
CAShapeLayer *shapeLayer = [CAShapeLayer layer];
[shapeLayer setPath:[[UIBezierPath bezierPathWithRoundedRect:CGRectMake(0, 0, barWidth, barHeight) cornerRadius:2] CGPath]];
shapeLayer.fillColor = [UIColor whiteColor].CGColor;
shapeLayer.position = CGPointMake(barX, scrlViewBars.frame.size.height - barHeight);
[scrlViewBars.layer addSublayer:shapeLayer];
此代码以循环方式写入,在录制开始后每秒调用2次。从而产生波浪条。那么如何删除添加到UIScrollView
的图层。我发现nilling layer.sublayers
会删除该图层。但我不知道如何实现这一点。
答案 0 :(得分:1)
这样做的一种方法是首先创建一个NSMutableArray
指向您要添加的CAShapeLayer
的指针。
然后调用添加图层到这个数组:
...
shapeLayer.position = CGPointMake(barX, scrlViewBars.frame.size.height - barHeight);
[addedLayers addObject:shapeLayer];
[scrlViewBars.layer addSublayer:shapeLayer];
我假设barX
是某种数字,可能是CGFloat
并且每30秒以相同的常数递增。现在,您需要找到一个公式,将barX
转换为在barX
添加的图层索引。
假设您每隔30px的X轴添加一层,这意味着
barX 0 --> index 0
barX 30 --> index 1
barX 60 --> index 2
...
您应该知道45秒时barX
是什么,并计算该时间点addedLayers
的索引,我们将其命名为index
。
现在用户点击了45秒后你就开始了一个循环:
for(int i = index; i < addedLayers.count; i++){
[[addedLayers objectAtIndex:i] removeFromSuperlayer];
}
它做的是从45秒开始删除所有图层。 此后,您必须从阵列中删除它们,然后运行
[addedLayers removeObjectsInRange:NSMakeRange(index, [addedLayers count] - index)];
这就是我这样做的方式,让我知道它是否有效。