2016-08-19 3 views
0

기본적으로 전체 화면을 다루는 사용자 지정 그림이있는 UIView 인 iPad 응용 프로그램에서 작업하고 있습니다. 그것은 오디오 응용 프로그램이며 VU 미터를 사용하여 초당 약 30 번 이더넷을 통해 업데이트 메시지를받습니다. 그러면 UI에 화면에 VU 미터를 다시 그리도록 지시합니다.UIView에 대한 자주/빈번한 호출 처리를 효율적으로 처리해야합니다.

내가 가진 문제는보기의 다양한 위치에 16 개의 VU 미터가 있으며 결국 초당 30 번 각각 needsDisplayInRect을 호출한다는 것입니다. drawRect 함수에서 그림을 모두 수행하면 작동하지만, CGRect이 전달 된 drawRect이 거의 전체 화면이므로 꽤 느립니다.

OSX 버전에는 그리기 성능을 크게 향상시킬 수있는 경로를 제공하는 기능이있는 NSViewgetRectsBeingDrawn 기능이 있습니다. 그러나 iOS에는 동일한 기능이 없다는 것을 알고 있습니다.

난 후라고 한 CGRectsdrawRect에서 그들을 다시 그리는 저장 시도했다, 그러나 아이폰 OS가 종종 needsDisplayInRect 그들을 호출 가지고있는 CGRects 사이의 영역을 다시 그리기로 결정 밝혀, 그래서 나는 끝낼 다시 그리기를 요청하지 않은 영역의 큰 흰색 직사각형 (내가 기대하는 성능 향상을 얻지 만). 여기서 문제는 실제로 다시 그려지는 rect를 얻는 방법을 볼 수 없다는 것입니다. rect는 본질적으로 다시 그려지는 모든 rect의 합집합 인 drawRect로 전달됩니다.

그래서 내가 놓친 UIView의 작은 영역을 매우 자주 다시 그리는 속도를 높이는 다른 방법이 있습니까?

답변

1

가장 간단한 해결책은 거의 모든 VU 미터에 대한 하위 뷰를 작성하는 것입니다. 아마 당신은 하나의 VUMeterView 클래스를 가지고 그것의 16 개의 인스턴스를 만들 것입니다.

관련 문제