2010-06-03 7 views
0

새로 고치지 않고 drawRect:에서 종료 할 수있는 방법이 있습니까? UIView? 예 :롤백 drawRect :

- (void)drawRect:(CGRect)rect { 

CGContextRef context = UIGraphicsGetCurrentContext(); 

CGContextSetRGBStrokeColor(context, 1.0, 1.0, 1.0, 1.0); 
CGContextSetLineWidth(context, 2); 

CGContextMoveToPoint(context, 10.0, 30.0); 
CGContextAddLineToPoint(context, 310.0, 30.0); 
CGContextStrokePath(context); 


//I would like to return from here and rollback all changes in drawRect: 

} 

감사합니다.

+0

아니요, 불가능합니다. 왜 그렇게하고 싶은지 설명하면 누군가가 대안 솔루션을 제공 할 수 있습니다. –

+0

지도 응용 프로그램입니다. 사용자가지도를 움직이면 새로운 스레드 (이 스레드 1을 호출하자)가 화면을 다시 그리기 시작합니다. 그런 다음 사용자가지도를 다시 이동하면 이제 thread2 (최신 스레드)가지도를 다시 그려야합니다. 그러나 thread1이 그림을 끝내지 않으면 화면은 thread1의 이미지를 빠르게 살핀다. 따라서 thread1의 drawRect : 메소드를 롤백하고 thread2의 이미지 만 그려주는 것이 좋습니다. – fic

+1

이상하게 들립니다. 화면을 50fps 이상 다시 그릴 수 없습니다. gui가 응답하기 위해서는 drawrect에서 보낸 시간이 1/50th보다 짧아야합니다. 드로잉이 오래 걸리는 경우 백그라운드 스레드의 텍스처를 그리는 데 필요한 시간이 소요되고 준비가 완료되면 drawrect로 화면에 blit됩니다 (1/50 초보다 훨씬 오래 걸림). 그러면 귀하의 질문은 백그라운드 스레드를 취소하고 새 스레드를 시작하는 방법이됩니다. – hooleyhoop

답변

0

문맥을 그리기 시작하지 않은 경우 drawRect:에서 반환하는 것이 가능할 수 있습니다. 뷰의 clearsContextBeforeDrawing 속성을 NO로 설정해야합니다.

컨텍스트에서 그리기를 시작한 후보기/레이어는 항상 내용을 업데이트합니다.

+0

답변 해 주셔서 감사합니다. – fic