2010-11-24 33 views
1

J'ai un MKMapView avec le défilement et l'interaction utilisateur désactivés dans un UITableViewCell. L'effet désiré (effectivement une image statique de la carte dans une certaine position) fonctionne très bien, mais lorsque le MKMapView dérive sur et hors écran (défilement) il recharge la carte, ce qui provoque parfois le crash de l'application. Je l'ai chargé la coutume UITableViewCell dans comme tout autre UITableViewCell dans cellForRowAtIndexPath:Arrêt de MKMapView à partir du rechargement

if(indexPath.section == 0 && indexPath.row == 0) 
{ 
    MapTableViewCell *cell = (MapTableViewCell *)[tableView dequeueReusableCellWithIdentifier:[NSString stringWithFormat:@"%@Map", cellIdentifier]]; 

    if(cell == nil) 
    { 
     cell = [[[MapTableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:cellIdentifier] autorelease]; 
    } 

    NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"MapTableViewCell" owner:self options:nil]; 

    for(id currentObject in topLevelObjects) 
    { 
     if([currentObject isKindOfClass:[UITableViewCell class]]) 
     { 
      cell = (MapTableViewCell *)currentObject; 
      break; 
     } 
    } 

    return cell; 
} 

J'ai découvert que cette méthode actuelle, si vous laissez la charge de l'image de carte avant de déplacer le UITableView alors il est OK. Mais si vous le déplacez hors de l'écran avant que le chargement ne soit terminé, il tombera en panne! :(

Je voudrais juste souligner que je ne veux pas être en mesure de contrôler la carte de quelque façon que ce soit ou d'afficher des annotations sur celle-ci.J'ai essayé de capturer une vue de carte, la cacher de l'écran et afficher cette capture d'écran comme UIImageView dans le UITableViewCell, mais cela ne suffisait pas

EDIT rapide:.. ce code mis à jour le code complet de cette méthode est mon TableViewCell personnalisée alloc incorrecte ici

+0

Pas évident quel résultat vous voulez réellement atteindre. À première vue, si le délégué de MKMapView est la cellule, vous devrez peut-être désactiver le délégué dans le -dealloc de la cellule. Je ne peux pas non plus savoir ce que votre chargement de plume est censé faire. –

+0

Je l'ai fait maintenant merci. Pensez que cela aurait pu être vous le savez. Dois-je libérer theMapView ici aussi? –

+0

@tc Dealloc la cellule semblait fonctionner. Mettez cela comme une réponse et je vais vous donner la tique verte! –

Répondre

1

Merci à tc la réponse (le commentaire ci-dessus).

Ce qui était nécessaire était pour moi de libérer le MKMapView dans la méthode UITableViewCell dealloc personnalisée.

1

Définissez la région du? carte/la portée de la carte à ce que vous désirez, puis modifiez les propriétés de userInteractionEnabled et zoomEnabled. Donc probablement quelque chose comme ceci:

MKCoordinateRegion region; 
region.center = "location"; //a CLLocationCoordinate2D location of where ever 

MKCoordinateSpan span; 
span.latitudeDelta = 0.03; //desired size for both latDelta and lonDelta 
span.longitudeDelta = 0.03; 
region.span = span; 

[mapView setRegion:region animated:YES]; 

Et puis pour les propriétés, essayez ceci:

mapView.zoomEnabled = NO; 
mapView.userInteractionEnabled = NO;