2009-11-20 4 views
1

800 픽셀 너비와 1200 픽셀 높이의 CG 컨텍스트를 만들었습니다. 이 컨텍스트를 기반으로 CGLayer를 생성했습니다 (크기 조절, 변환 및 회전). 따라서 어떤 시점에서는 CGLayer가 컨텍스트보다 크고 변환되고 회전 된 것처럼이 CGLayer의 모든 부분이 컨텍스트 내부에 있지는 않습니다. 다음 그림을 참조하십시오 : 당신이 그림에서 볼 수 있듯이iPhone : 석영에 최적화 된 그림

layer and context

, 레이어의 일부가 컨텍스트 영역 밖에.

CGContextDrawLayerInRect(context, superRect, objectLayer); 

을 사용하여 최종 컴포지션을 렌더링하면 컨텍스트 외부의 불필요한 부분을 포함하여 전체 레이어가 렌더링됩니다.

내 문제는 : 컨텍스트 내에서 관련된 부분 만 그릴 수 있다면 빠르게 렌더링하고 메모리를 절약 할 수 있습니다.

그렇게 할 방법이 있습니까?

참고 : 레이어는 투명도를 포함합니다.

CGLayers가 포함되지 않은 솔루션을 제공하지 마십시오.

미리 감사드립니다.

답변

0

CATiledLayer를 사용할 수 있습니까? 구글지도 ALA 사각형이해야 게으른로드 ....

+(Class)layerClass 
{ 
return [CATiledLayer class]; 
} 


-(id)init { 
    CATiledLayer *tiledLayer = (CATiledLayer *) self.layer; 
    tiledLayer.tileSize = CGSize(x,x); 
    tiledLayer.levelsOfDetail = y; 
    tiledLayer.levelsOfDetailBias = z; 
} 
+0

아니요, 불행히도 CGLayer를 사용해야합니다. 이유 중 하나는 내가 화면을 써야하기 때문입니다. 그러나 어쨌든 나는 CATiledLayer가 어떻게 작동 하는지를 설명하는 간단한 코드를 찾을 수 없었습니다. 그것은 애플이 지옥으로 막연히 문서화 한 비밀 기능 중 하나 인 것으로 보인다. – SpaceDog

+0

@Mike : 그것은 밀교도 기능도 아니며, CALayer 하위 클래스입니다. – Chuck

+0

이 예제가 과거에 유용하다는 것을 알았습니다. PDF 함수를 사용하여 그려지지만 그렇지 않으면 타일링 된 레이어를 잘 보여줍니다. http://www.olivetoast.com/blog/2009/08/simple-uiscrollview-catiledlayer-pdf-example/ – Mobs

1

당신은 CGContextClip/-ToMask/-ToRect를 사용하여 상황에 맞는 클립 수 있습니다.

하지만 실제로는 클리핑 경계를 계산하고 '덜 그리는'것보다 실제로 픽셀을 컨텍스트에 '덤프'하는 것이 더 저렴하다고 생각합니다.

잉여 도면은 추가 메모리를 (일반적으로) 사용하지 않습니다.

관련 문제