2009-11-20 6 views
1

J'ai créé un contexte CG de 800 pixels de large et 1200 pixels de hauteur. J'ai créé CGLayer sur ce contexte qui a été transformé (mis à l'échelle, traduit et pivoté). Ainsi, à un moment donné, comme le CGLayer est plus grand que le contexte et qu'il a été traduit, pivoté, etc., toutes les parties de ce CGLayer ne se trouvent pas dans le contexte. Voir l'image suivante:iPhone: dessin optimisé en quartz

layer and context

Comme vous pouvez le voir par l'image, certaines parties de la couche tombe en dehors de la zone de contexte. Quand je rends la composition finale à l'aide

CGContextDrawLayerInRect(context, superRect, objectLayer); 

il va rendre la couche complète, y compris les parties inutiles en dehors du contexte.

Mon problème est le suivant: si je peux faire en sorte que les parties pertinentes soient dessinées à l'intérieur du contexte, je peux le rendre plus rapide et économiser de la mémoire.

Est-il possible de le faire?

REMARQUE: LA COUCHE contient de la transparence.

Veuillez ne pas donner de solutions qui n'impliquent pas CGLayers.

merci d'avance.

Répondre

0

Pouvez-vous utiliser un CATiledLayer? Cela devrait paresseux charge en carrés ala google maps ....

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


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

Non, malheureusement, je dois utiliser CGLayer. Une des raisons est parce que je dois écrire hors écran. Mais de toute façon je n'ai pas pu trouver un code simple qui explique comment fonctionne CATiledLayer. Il semble que ce soit l'une de ces fonctions ésotériques qu'Apple a documentées comme un enfer. – SpaceDog

+0

@Mike: Ce n'est ni une fonction ésotérique ni une fonction, c'est une sous-classe CALayer. – Chuck

+0

J'ai trouvé cet exemple utile dans le passé, il dessine en utilisant des fonctions PDF, mais illustre très bien le carreleur. http://www.olivetoast.com/blog/2009/08/simple-uiscrollview-catiledlayer-pdf-example/ – Mobs

1

Vous pouvez attacher le contexte en utilisant CGContextClip/-ToMask/-ToRect.

Mais je pense qu'il est en fait moins cher/plus rapide de simplement "vider" les pixels dans un contexte, que d'avoir à calculer les limites de découpage et à "dessiner moins".

Le dessin en surplus n'utilise pas (normalement) de mémoire supplémentaire.