2010-05-12 9 views
1

J'ai une CATiledLayer dans un UIScrollView et tout fonctionne correctement. Maintenant, je veux ajouter le support pour montrer différentes tuiles pour trois niveaux de zoom.CATiledLayer: détermination de niveauxOfDetail dans drawLayer

J'ai défini les niveauxOfDetail à 3 et ma taille de tuile est 300 x 300. Cela signifie que je dois fournir trois ensembles de tuiles (je fournis PNGs) pour couvrir: 300 x 300, 600 x 600 et 1200 x 1200 Mon problème est qu'à l'intérieur de "(void) drawLayer: (CALayer *) couche inContext: (CGContextRef) ctx" Je ne peux pas déterminer quel levelOfDetail est en train d'être dessiné. Je peux récupérer les limites actuellement requises en utilisant CGContextGetClipBoundingBox et généralement cela demande un rect pour l'une des tailles ci-dessus, mais au niveau des bords de la couche, les tuiles sont généralement plus petites et donc ce n'est pas une bonne méthode.

Fondamentalement, si j'ai défini levelsOfDetail sur 3, comment puis-je savoir si drawLayer demande le niveau 1, 2 ou 3 lorsqu'il est appelé?

Merci,

Russell.

+0

Avez-vous réussi à résoudre ce problème? Je suis confronté au même problème depuis longtemps ... – iOSDev

+0

Ouais, faites défiler vers le bas! –

Répondre

2

Je l'ai finalement trouvé.

Extrait le CTM du contexte graphique et examine son échelle (par exemple l'élément a).

CGAffineTransform transform = CGContextGetCTM (ctx); 

    transform.a holds the zoom 
+0

Salut Russell, J'utilise CATiledLayer pour dessiner des pages à partir d'un pdf. Il fonctionne très bien, mais quand je tourne l'appareil dans les journaux de la console je reçois 3 erreurs, 1.wait_fences: n'a pas reçu de réponse: 10004003 2. : FT_Select_Charmap a échoué: erreur 6. 3.Received d'avertissement de mémoire. Niveau = 2 Avez-vous une idée de la façon de résoudre ces erreurs? Merci beaucoup – CKT