2012-03-16 8 views
1

Est-ce que quelqu'un a des astuces pour améliorer les performances de CATiledLayer sur un écran rétine?CATiledLayer & Retina display

Ce poste: CATiledLayer in iPad retina simulator yields poor performance

implique qu'il ya des problèmes avec le simulateur, mais je remarque une mauvaise performance sur le dispositif réelle ainsi. C'est un problème assez évident car il charge des tuiles plus grandes plus tôt sur l'écran de la rétine. La seule chose que je peux faire est de retraiter les images en mosaïque avec plus de niveaux de détails.

Je fais un petit truc:

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

lors du calcul de l'échelle, mais cela ne semble pas être suffisant pour faire face à la mauvaise performance.

+0

Tout en confirmant que je vois la même question sur le matériel. CATiledLayer semble fonctionner beaucoup mieux sur mon iPad 2 que sur mon iPad 3. Je ne sais pas si cela est dû à un bug dans mon code, ou à un problème sous-jacent. –

+0

Remplacer '- (void) didMoveToWindow {[super didMoveToWindow]; self.contentScaleFactor = 1; } '. L'histoire courte est que CATiledLayer fonctionne déjà basé sur l'écran * pixels * (pas "points"). Un peu plus de discussion [ici] (http://markpospesel.wordpress.com/2012/04/03/on-the-importance-of-setting-contentscalefactor-in-catiledlayer-backed-views/) –

Répondre

1

Sur mon point de vue de carrelage:

- (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; 
} 

Ceci a obtenu l'iPad 3 fonctionnant comme l'iPad 2 pour moi. Si vous faites quelque chose d'autre, comme la superposition de données, etc., vous devrez peut-être faire plus de querelles. Effectivement, cela double juste la taille de votre contenu, et la taille de vos carreaux, niant les effets de l'affichage de la rétine.

Vous pouvez également modifier votre max et min zoomScales pour la rétine

Questions connexes