2011-01-22 3 views
0

OpenGL ES보기로 iOS 응용 프로그램을 만들고 있습니다. 3D 뷰 위에 코코아 터치를 사용하여 기타 GUI 비트를 그립니다.높은 CPU로드 지연 UIView 다시 그리기 (iOS)

프레임 속도가 좋은 한 제대로 작동합니다. 그러나 CPU 부하가 높을 때 (GLES 뷰가 20-ish FPS로 떨어짐) 다음 UIKit 디스플레이 사이클이 앞으로 밀려나는 것처럼 보입니다.

특히, 다양한 UIView 하위 클래스를 기반으로 툴팁 뷰를 표시하려고합니다. 표시 할 시간이되면 툴팁 레이블 텍스트를 업데이트하고 배경의 크기를 조정 한 다음 주 UIView에 대해 숨김을 NO로 설정하고 setNeedsDisplay 및 setNeedsLayout을 호출합니다.

프레임 속도가 낮 으면 (즉, CPU로드가 높을 때) 다음 표시주기가 무한정 앞으로 푸시되는 것처럼 보입니다. 그러나 CPU로드가 떨어지면 즉시보기가 예상대로 표시됩니다.

3D 엔진 다시 그리기 사이에 UIKit에서 그리기 사이클을 유발할 수있는 방법이 있습니까? 다른 아이디어?

답변

0

iPhone에서 달리 지정하지 않는 한 모든 응용 프로그램은 UI 드로잉과 논리를 한 스레드에서 수행합니다.

[NSThread detachNewThreadSelector:@selector(3DRenderingMethod) toTarget:self withObject:nil] 

다음은 관련 문서입니다 : http://developer.apple.com/library/iOS/#documentation/Cocoa/Reference/Foundation/Classes/NSThread_Class/Reference/Reference.html

+0

모든 로직 및 도면 괜찮 (그들이 내 응용 프로그램에서 할 수있는) 하나 개의 스레드에서 실행

당신은 다른 스레드로 3D 드로잉 코드를 이동할 수 있습니다. 요점은 높은 CPU로드는 확실히 주 스레드를 차단하고 있지는 않지만 UIKit 재 작성을 무기한 진행하는 것 같습니다. UIKit은 CPU로드가 높을 때 의도적으로 다시 그리기를 건너 뛸 것 같습니다. 이것은 내가 특정한 경우에 막고 싶은 것입니다. – Simplex