2010-06-26 18 views
2

J'ai un UIScrollView avec un UIView qui à son tour contient un CATiledLayer qui affiche une carte.CATiledLayer changement d'images avec différentes tailles lors du zoom (Carte connexe :)

Je dois commencer par un aperçu où l'on peut zoomer très profond. J'ai donc créé 4 images différentes (en fait des PDF) avec 4 tailles différentes de la carte (la plus grande a quelque chose comme 5700 x 6700px)

J'ajoute le plus petit (la vue d'ensemble) au CATiledLayer puis j'échange les images sur certains zoom les niveaux.

Jusqu'à présent, cela fonctionne un peu. Le problème est que, lorsque j'affiche la plus grande carte (zoom le plus proche), les tuiles deviennent TRÈS grandes et il faut du temps pour les dessiner (et selon les niveaux de détail/biais, l'application produit un avertissement de mémoire). accidents). J'ai essayé de commencer avec la plus grande carte et de régler le niveau de zoom au minimum quand la carte apparaît pour la première fois, mais cela prend beaucoup de temps car les tuiles deviennent très petites (quand je ne le mets pas le minimum-zoom, tout fonctionne bien).

J'ai essayé d'ajuster la taille des carreaux lorsque j'ai changé les cartes - mais apparemment, cela ne fonctionne pas.

Une idée de comment je peux résoudre ce problème? ;)

Merci pour toute aide ...

Edit:

J'essaie maintenant de définir deux CATiledLayers puis les échanger quand un certain niveau de zoom est atteint séparés - mais qui fait la crash de l'application?

[myContentView.layer replaceSublayer: tiledLayer with: tiledLayerBig]; 

oh my ... :)

Edit2:

Ok - je l'ai eu de travail - plus ou moins. La seule chose qui arrive maintenant, c'est que le CATiledLayer se comporte étrangement quand j'ajoute la plus grande image. Cela fonctionne bien pendant un certain temps, mais quand un certain nombre de tuiles est dessiné, je reçois un avertissement de mémoire et l'application se bloque finalement. En fait, je m'attendrais à ce que les tuiles invisibles soient éliminées lorsqu'elles quitteront la fenêtre. Cela ne semble pas se produire, donc finalement, toutes les tuiles seront tirés au sort qui semble être trop pour l'iPhone mémoire ... :(

Toutes les idées, comment résoudre ce problème?

Répondre

0

Il sons comme les tuiles qui ne sont plus utilisés ne sont pas libérés de la mémoire. Qu'est-ce que votre

- (void)drawRect:(CGRect)rect method 
de remplacement sur mesure

look comme

?