2011-08-18 4 views
0

저는 PDF 리더 응용 프로그램을 만들고 있습니다. PDF 콘텐츠를 렌더링하기 위해 CALayer를 사용하고 있습니다 .i는 페이지 전체를 탐색하기 위해 스 와이프 동작을 사용했습니다. 사용자가 레이어의 렌더링이 시작되면 다음 또는 이전 페이지로 이동합니다. 현재 페이지의 렌더링이 레이어로 끝나면 '다음 페이지로 이동'작업이 수행됩니다. 현재 페이지의 렌더링을 중단하고 싶습니다. 즉시 스 와이프가 발생하고 다음 페이지가 레이어에서 렌더링을 시작해야합니다. 모든 아이디어가 도움이됩니다.iPhone에서 CALayer의 콘텐츠 업데이트를 중단 하시겠습니까?

업데이트 : 여기에서도 내가 "loadingThread을"취소 최대한 빨리, 내 액션 메소드에서, 코드가

[loadingThread cancel]; 
[loadingThread release]; 
loadingThread=nil; 

같은 기록으로 스 와이프로 내 코드

-(void)loadSinglePageWithWidth:(float)width andHeight:(float)height{ 
    draw=0; 
    NSLog(@"before draw"); 
    [markupView.layer insertSublayer:renderingLayer1 above:tiledLayer1]; 
    loadingThread=[[NSThread alloc] initWithTarget:self selector:@selector(loadSinglePage) object:nil]; 
    [loadingThread start]; 
} 
-(void)loadSinglePage{ 
    [renderingLayer1 setNeedsDisplay]; 
} 

입니다 drawLayer : 메서드의 실행이 running.am 것 같다이 스레드 접근법으로 올바른? drawLayer : 코드 setNeedsDisplay 메서드를 호출하는 데 사용하고 스레드에 의해 실행됩니다?

답변

0

최상의 솔루션은 별도의 스레드에서 렌더링을 수행하는 것입니다. 완료되면 렌더링 된 이미지를 화면에 표시하기 만하면됩니다. 그렇지 않은 경우 언제든지 작업을 취소 할 수 있습니다.

+0

나는 말한대로 스레드를 시도했지만 렌더링 및 충돌하는 동안 다른 페이지로 스 와이프하면 "누락되었거나 잘못된 이미지 '너비'값"과 같은 GDB의 일부 오류가 표시됩니다. – Hariprasad

+0

그렇다고해서이 접근법이 작동하지 않는다는 것을 의미하지는 않습니다. 다시 구현하려고 할 수 있습니다. 코드를 제공하면 버그를 찾을 수 있습니다. – Anton