저는 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);
}
감사 (다른 위에 하나) 화면에 페인트되는 !
감사합니다. 나는 이걸 더 이상 볼 시간이 없지만, 이것이 유일하고 합리적인 것처럼 대답으로 이것을 수여하고 있습니다. :) – dev
다른 대답은 dirtyRect 인수를 관찰하는 것이지만 CATiledLayer가 도움이 될 것으로 생각합니다. –