2012-03-16 4 views
1

Retina 디스플레이에서 CATiledLayer의 성능을 개선하기위한 트릭이 있습니까?CATiledLayer & retina display

이 게시물 : CATiledLayer in iPad retina simulator yields poor performance

시뮬레이터에 문제가 있다는 것을 의미하지만, 나뿐만 아니라 실제 장치에 성능 저하를 알아 차리지하고 있습니다. 그것은 망막 디스플레이에 더 큰 타일을 더 빨리로드하기 때문에 꽤 분명한 문제입니다. 내가 할 수있는 유일한 방법은 세부적인 수준의 타일 이미지를 다시 처리하는 것입니다.

내가 한 약간의 트릭을 수행합니다

CGFloat scale = CGContextGetCTM(context).a/self.contentScaleFactor; 

규모를 계산하지만이 성능 저하에 대처하기에 충분하지 않는 것 같습니다. 내 타일보기에

+0

에 대한 귀하의 최대 및 최소 zoomScales을 변경할 수 있습니다. CATiledLayer는 iPad 3보다 iPad 2에서 훨씬 잘 작동하는 것 같습니다. 이것이 내 코드의 버그 또는 기본 문제로 인한 것인지 확실하지 않습니다. –

+0

오버라이드'- (void) didMoveToWindow {[super didMoveToWindow]; self.contentScaleFactor = 1; }'. 짧은 이야기는 CATiledLayer가 이미 스크린 * 픽셀 * ("점"이 아님)을 기반으로 작동한다는 것입니다. 조금 더 토론 [여기] (http://markpospesel.wordpress.com/2012/04/03/on-the-importance-of-setting-contentscalefactor-in-catiledlayer-backed-views/) –

답변

1

:

- (id)initWithImageName:(NSString *)name size:(CGSize)size 
{ 

    if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)] == YES && [[UIScreen mainScreen] scale] == 2.00) { 

     size = CGSizeMake(size.width*2, size.height*2); 

    } 

    if ((self = [super initWithFrame:CGRectMake(0, 0, size.width, size.height)])) { 

     CATiledLayer *tiledLayer = (CATiledLayer *)[self layer]; 

     tiledLayer.levelsOfDetail = 4; 
     if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)] == YES && [[UIScreen mainScreen] scale] == 2.00) { 

      tiledLayer.tileSize = CGSizeMake(512, 512); 
     } 

    } 

    return self; 
} 

이 아이 패드 3 나를 위해 아이 패드 2처럼 작동 얻었다. 데이터를 덮어 씌우는 것과 같은 다른 일을하는 경우에는 더 많은 논쟁을해야 할 수도 있습니다. 효과적으로 이것은 단지 당신의 내용의 크기와 타일의 크기를 두 배로하여 망막 디스플레이의 효과를 부정합니다.

은 또한 그냥 내가 하드웨어에서 같은 문제를보고 있어요 것을 확인 망막

관련 문제