2016-10-25 5 views
0

음성 메모와 마찬가지로 오디오 녹음 앱을 만들고 있습니다. 지금까지 오디오를 녹음, 재생, 다듬기 및 병합 할 수있었습니다. 모든 음악 앱의 막대 시각화와 마찬가지로 웨이브 막대의 타임 라인을 만듭니다.UIScrollView에서 CAShapeLayer를 어떻게 제거합니까?

녹음을 중지하면 실수로 다시 녹음 할 수 있습니다. 예를 들어, 그가 45 초 후에 실수를했기 때문에 50 초에 녹음을 멈춘다. 가로 스크롤 막대 (타임 라인)를 끌어서 45 초가됩니다. 그리고 녹음 버튼을 누를 때 나는 45 초 후에 모든 웨이브 바를 지우고 싶다. 이것을 어떻게 성취합니까? 이것은 CAShapeLayer을 사용하여 scrollview에서 웨이브 바를 만드는 방법입니다.

이 코드는 녹음이 시작된 후 매초 2 회 호출되는 루프로 작성됩니다. 따라서 웨이브 바를 만듭니다. 그렇다면 UIScrollView에 추가 된 레이어를 제거하려면 어떻게해야합니까? 나는 그 닝 layer.sublayers 레이어를 제거 할 것으로 나타났습니다. 그러나 이것을 구현하는 방법을 모르겠습니다.

답변

1

한 가지 방법은 추가하려는 CAShapeLayer에 대한 포인터의 NSMutableArray을 먼저 만드는 것입니다.

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

내가 barX를 가정하고있어 수의 일종, 아마 CGFloat과 같은 일정 30 초마다 의해 증가된다

는 다음과 같이 다소 그 배열에 레이어를 추가 호출합니다. 이제 barXbarX에 추가 된 색인으로 변환하는 수식을 찾아야합니다.

은의이 이름을하자, X 축마다 30 픽셀, 즉

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)]; 

을 실행 배열에서 제거해야 작동하는지 알려주세요.

+0

감사합니다. 그것은 유망 해 보인다. 나는 그것이 효과가 있기를 바랍니다. –

+0

@HirenPrajapati를 실행 한 후 알려 드리겠습니다. 문제가 발생 했습니까? – tomiQrsd

+0

그것은 매력처럼 작동했습니다. 초당 두 개의 웨이브 바를 만듭니다. 힌트를 얻은 후에는 너무 쉬웠습니다. 고맙습니다. 최대 응답 –

관련 문제