2009-04-10 5 views
2

저는 Quartz2d를 처음 접했기 때문에 쉽게 대답 할 수 있기를 바랍니다.Quartz2D 및 클리핑 -이 드로잉 루틴을 최적화 하시겠습니까?

콘텐츠 프레임이 1024x768 인 scrollview가 있습니다. 이 내에서 Quartz2d를 사용하여 일부 드로잉을 수행하는 사용자 정의보기 (프레임 1024x768 포함)를 푸시합니다. 아이디어는, 나는 사용자가 다른 부분을보기 위해 주위를 스크롤 할 수있는 넓은 영역을 가지고있다.

내가 겪고있는 문제는 장치를 스크롤 할 때 메모리 경고 오류나 끔찍한 스크롤 성능이 발생한다는 것입니다. 1024x768 필드 전체를 다시 그리기 때문에 이는 당연한 것입니다. 나는 UIScrollView 오프셋에 클리핑 패스를 설정하는 것이 도움이 될 것이라고 생각했고 .. 스크롤 할 때까지 .. 그런 경우에는 스크롤이 멈출 때까지 뷰가 다시 그리지 않는다. scrollViewDidScroll 도중 뷰를 그리면 성능이 저하됩니다.

누구나 내 드로잉 루틴을 최적화 할 수있는 방법을 말해 줄 수 있습니까?

은 내가 가려지고 그 중 하나는 두 개의 이미지를 .. 가지고 있고, 모두 당신이 제공 할 수있는 모든 도움을 사전에

- (void)drawRect:(CGRect)dirtyRect {

CGContextRef myContext = UIGraphicsGetCurrentContext(); 


// get our offset (where we've scrolled to) 
CGPoint offset = scrollView.contentOffset; 

    // clip to our offset.. uncomment for good performance but terrible scrolling 
//CGContextClipToRect(myContext, CGRectMake(offset.x, offset.y, 480, 320)); 


// make an image from the mask context 
CGImageRef aMaskImage = CGBitmapContextCreateImage (myMaskContext); 

// mask the first image 
CGImageRef aImage = CGImageCreateWithMask(myImageRef1, aMaskImage); 

CGContextDrawImage(myContext, CGRectMake(0, 0, self.frame.size.width, self.frame.size.height), myImageRef1); 
CGContextDrawImage(myContext, CGRectMake(0, 0, self.frame.size.width, self.frame.size.height), aImage); 


CGImageRelease(aImage); 
CGImageRelease(aMaskImage); 

}

감사 (다른 위에 하나) 화면에 페인트되는 !

답변

0

일반적으로 큰 것들을 스크롤하는 것을 최적화하려면 CATiledLayer를 조사하십시오.

+0

감사합니다. 나는 이걸 더 이상 볼 시간이 없지만, 이것이 유일하고 합리적인 것처럼 대답으로 이것을 수여하고 있습니다. :) – dev

+0

다른 대답은 dirtyRect 인수를 관찰하는 것이지만 CATiledLayer가 도움이 될 것으로 생각합니다. –

0

어딘가에 setNeedsDisplay으로 전화를합니다. setNeedsDisplayInRect으로 전화해야합니다. 변경된 rect 만 전달해야합니다.

관련 문제