2016-10-25 30 views
0

我正在創建錄音應用程序,就像語音備忘錄一樣。到目前爲止,我可以錄製,播放,剪輯和合並音頻。我在任何音樂應用程序中創建波形條的時間軸,就像條形圖可視化一樣。如何從UIScrollView中移除CAShapeLayer?

當用戶停止錄製時,如果他犯了錯誤,他可以返回特定秒鐘再次從那裏錄製。例如,如果他在50秒後停止錄製,因爲他在45秒後犯了錯誤。他將通過拖動水平滾動條(時間軸)達到45秒。當他點擊錄製按鈕時,我想在45秒後清除所有波形條。我如何實現這一目標?這是我如何使用CAShapeLayer在滾動視圖中創建波形條。

該代碼被寫入一個循環,每循環一次,記錄開始後會被調用2次。從而創建波浪條。那麼如何刪除添加到UIScrollView的圖層。我發現nilling layer.sublayers將刪除該圖層。但我不知道如何實現這一點。

回答

1

一種方法是首先創建一個指向CAShapeLayer的指針NSMutableArray,您將添加。

然後調用添加層以該陣列有點像這樣:

... 
shapeLayer.position = CGPointMake(barX, scrlViewBars.frame.size.height - barHeight); 
[addedLayers addObject:shapeLayer]; 
[scrlViewBars.layer addSublayer:shapeLayer]; 

我假設barX是某種數量的,大概CGFloat並且由相同的恆定,每30秒遞增。現在您需要找到一個公式,將barX轉換爲在barX處添加的圖層索引。

說你要添加圖層X軸的每30像素,這將意味着

barX 0 --> index 0 
barX 30 --> index 1 
barX 60 --> index 2 
... 

你應該知道什麼是barX 45秒,在該時間點計算addedLayers指數,讓我們將其命名爲index

現在用戶在45秒挖掘後,你運行一個循環:

for(int i = index; i < addedLayers.count; i++){ 
    [[addedLayers objectAtIndex:i] removeFromSuperlayer]; 
} 

它確實這是什麼刪除了所有圖層從45秒起。 現在之後你必須從數組中刪除它們,以便運行

[addedLayers removeObjectsInRange:NSMakeRange(index, [addedLayers count] - index)]; 

這就是我會做的方式,讓我知道,如果它的工作原理。

+0

感謝您的回覆。那看起來很有希望我希望它能起作用。在執行 –

+0

@HirenPrajapati後,我會讓你知道它是否工作或者你遇到過任何問題? – tomiQrsd

+0

它像一個魅力工作。每秒我創建兩個波形條。所以在提示後它太容易了。謝謝。 Upvoting答案 –