2011-08-09 2 views
2

내 응용 프로그램에서는 UIViewController가 서브 클래 싱 된 UIView 및 기타 여러 요소와 함께 포함되어 있습니다. 내 drawRect: 메서드에서 DrawView라고하는 UIView 내부에서 표 그리드 유형을 그리고 그리드에 CGPoint 배열을 플로트합니다. 사용자가 화면을 탭하면 touchesBegan:withEvent:을 호출하고 그리드에서 가장 가까운 점을 터치하여 확인하고 drawRect: 메서드가 그려주는 배열에 점을 추가하고 [self setNeedsDisplay]을 호출합니다. 사용자가 화면에서 손가락을 움직이면 마지막 위치에서 포인트가 변경되었는지 확인하고 포인트를 업데이트하고 필요에 따라 [self setNeedsDisplay]을 호출합니다.Core Graphics-drawRect : 자주 호출되지 않음

이것은 시뮬레이터에서 잘 작동합니다. 그러나 실제 iPhone에서 실행하면 매우 천천히 움직입니다. 손가락을 움직이면 점을 그리는 데 뒤 떨어진다. 포인트를 다른 스레드에 배치 할 위치에 대한 계산을 실행하면 성능이 향상 될 수 있음을 읽었습니다. 이 사실을 알고있는 사람은 누구인가? 지연을 줄이기위한 다른 제안?

답변

4

지연을 줄이기위한 다른 제안 사항이 있습니까?

예. -drawRect:을 사용하지 마십시오. 길고 복잡한 이유가 있지만 기본적으로 UIKit에서 UIView 서브 클래스에 -drawRect:을 구현했다고 판단하면 렌더링은 실제로 느린 소프트웨어 기반 렌더링 경로를 거칩니다. CALayer 개체 및 컴포지트보기로 그릴 때 하드웨어 가속 그래픽을 얻을 수있어 앱의 FAR을 더 효율적으로 만들 수 있습니다.

+0

좋은 답변입니다. 하지만 어떻게 할거 니? 사용자별로 레이어가있는보기 또는 여러 개의 하위 레이어가있는보기 하나씩을 볼 수 있습니까? –

+0

@Sandro가 작동 할 수도 있지만, CALayers 대신 UIView 객체를 사용합니다. CF 유형 (UIImage vs CGImageRef 등) 대신 ObjC 유형을 처리하기 때문에 제스처 인식기를 연결할 수 있습니다. –

+0

감사합니다. 나는 신기한 일이며, CALayer 오브젝트 나 복합 뷰가 무엇인지 전혀 알지 못합니다. [CALayer에 관한 Apple의 문서] (http://developer.apple.com/library/mac/#documentation/GraphicsImaging/Reference/CALayer_class/Introduction/Introduction.html)를 찾았지만 권장하는 다른 튜토리얼이나 설명서가 있습니다. 이 것들에 대해 배우고, 그걸 사용하여 어떻게 그리는가? –

관련 문제