2013-07-11 2 views
1

뷰에 많은 오디오 미터를 그려서 drawRect가 오디오 변경 속도를 따라갈 수 없다는 것을 알았습니다. 실제로는 이미지의 아주 작은 부분 만 한 번에 변경되므로 실제로 점진적인 변경 사항을 그려야합니다.작은 수정으로 많은 그림을 그릴 수 있습니까?

나는 CGLayer를 생성하고 데이터가 변경 내가 CGContextBeginPath, CGContextMoveToPoint, CGContextAddLineToPointCGContextStrokePath를 사용할 때 CGLayer에 그립니다.

보기에서 drawRect에 나는 CGContextDrawLayerAtPoint을 사용하여 레이어를 표시합니다.

데이터가 변경되면 CGLayer의 맨 위에 선을 그 어서 차이점을 그립니다. 나는 포토샵과 같았고 새로운 데이터가 낡은 것을 끌어 왔다고 가정 했었지만 이제는 내가 그린 모든 선이 여전히 레이어에 남아 있다고 믿습니다. 그 맞습니까?

그렇다면 CGLayer에서 줄을 제거 할 수있는 방법이 있습니까?

답변

0

'오디오 측정기'로 정확히 말하면 의도 한 디자인의 스냅 샷을 보여줍니다. 당신이 CGLayerRelease(layer)

2) CGContextStrokePath는 비용이 많이 드는 작업이다 해제하지 않는 한

다음은 내 suggestions-

1) 예 새로운 데이터는 단지 CGLayer 위에 그립니다은 ... 우리에게 약간의 코드를 표시합니다. 제네릭 한 획을 만들어 UIImage에 저장할 수 있습니다. 그런 다음 매번 datachanges UIImage을 재사용하십시오.

3) 가장 간단한 해결책 : 오디오 레벨 만 표시하려면 UIProgressView을 사용하십시오.

0

나는 지금까지 그린 모든 라인이 레이어에 남아 있다고 생각한다. 그 맞습니까?

예.

그렇다면 CGLayer에서 선을 제거하는 방법이 있습니까?

아니요. 새 레이어를 만듭니다. 일반적으로 반복적으로 그리는 것에 대한 레이어를 만듭니다.

경로가 아닌 직사각형을 그리면 그림이 단순화 될 수 있습니다.

일부 오디오 미터의 경우 미터를 여러 조각으로 나누면 도움이됩니다 (여기에서 CGLayer를 사용할 수 있음). 마찬가지로 직사각형을 선택적으로 그리고/또는 그림, 이미지 및/또는 레이어를 클립 할 수도 있습니다.

관련 문제