2016-10-25 3 views
0

Ich erstelle Audio-Aufnahme-App genau wie Voice Memo. Bis jetzt bin ich in der Lage, Audio aufzunehmen, abzuspielen, zuzuschneiden und zusammenzuführen. Ich erstelle Timeline von Wavebars genau wie Barvisualisierung in jeder Musik-App.Wie entferne ich CAShapeLayer von UIScrollView?

Wenn der Benutzer die Aufzeichnung beendet, kann er zur bestimmten Sekunde zurückkehren, um von dort wieder aufzunehmen, wenn er einen Fehler macht. Zum Beispiel, wenn er die Aufnahme mit 50 Sekunden stoppt, weil er nach 45 Sekunden einen Fehler gemacht hat. Er wird durch Ziehen der horizontalen Bildlaufleiste (Timeline) auf 45 Sekunden gehen. Und wenn er auf die Aufnahmetaste tippt, möchte ich nach 45 Sekunden alle Wavebars löschen. Wie erreiche ich das? So erstelle ich in Scrollview Wave-Balken mit CAShapeLayer.

Dieser Code wird in einer Schleife geschrieben, die 2-fache nach dem Aufzeichnen beginnt jede Sekunde aufgerufen wird. So entstehen Wellenbalken. Also, wie entferne ich die Schicht UIScrollView hinzugefügt. Ich fand, dass Nilling layer.sublayers die Schicht entfernt. Aber ich weiß nicht, wie ich das umsetzen soll.

Antwort

1

Ein Weg, um dies zu tun ist, zuerst eine NSMutableArray von Zeigern zu CAShapeLayer s, die Sie hinzufügen.

nennen Dann Zugabe Schicht zu diesem Array etwas wie folgt aus:

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

Ich gehe davon aus barX eine Art Zahl ist, wahrscheinlich ein CGFloat und wird von den gleichen konstanten alle 30 Sekunden erhöht wird. Jetzt müssen Sie eine Formel finden, um barX in den Index der Schicht zu transformieren, die bei der barX hinzugefügt wird.

Sagen Sie Schichten hinzufügen, jeder 30px der X-Achse, dass

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

Sie sollten wissen, was das ist barX bei 45 Sekunden, und berechnen den Index addedLayers zu diesem Zeitpunkt bedeuten würde, die es nennen lassen index.

Jetzt, nach 45 Sekunden bei angezapft Benutzer führen Sie eine Schleife:

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

Was es tat, ist es alle Schichten von 45 Sekunden ab entfernt. nun nach, dass Sie sie aus dem Array zu entfernen, so

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

ausführen, das ist so, wie ich es tun würde, lassen Sie mich wissen, ob es funktioniert.

+0

danke für die Antwort. Das sieht vielversprechend aus. Ich hoffe, dass es funktionieren wird. Ich werde Sie wissen, nach der Implementierung –

+0

@HirenPrajapati hat es funktioniert oder haben Sie ein Problem festgestellt? – tomiQrsd

+0

es funktionierte wie ein Charme. Pro Sekunde erstelle ich zwei Wavebars. So war es nach deinem Hinweis zu einfach. Vielen Dank. Upvoting Antwort –