2010-11-24 6 views
1

Ich habe eine MKMapView mit Scrollen und UserInteraction in einem UITableViewCell deaktiviert. Der gewünschte Effekt (effektiv ein statisches Bild der Karte in einer bestimmten Position) funktioniert wirklich gut, aber wenn der MKMapView auf dem Bildschirm driftet (Scrollen), lädt er die Karte neu, was gelegentlich zum Absturz der App führt. Ich habe die Gewohnheit geladen UITableViewCell in wie jedes andere UITableViewCell in cellForRowAtIndexPath:Stop MKMapView von Neuladen

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

Ich habe, dass mit dieser aktuellen Methode herausgefunden, ob Sie die Karte Bild Last lassen, bevor die UITableView bewegen dann auf OK es ist. Aber wenn Sie es vom Bildschirm entfernen, bevor es fertig geladen ist, wird es abstürzen! :(

Ich werde nur darauf hinweisen, dass ich nicht in der Lage sein möchte, die Karte in irgendeiner Weise zu steuern oder irgendwelche Anmerkungen zu zeigen. Ich habe versucht, eine Kartenansicht zu screenen, es vom Bildschirm ausblenden und diesen Screenshot anzeigen ! als UIImageView im UITableViewCell aber nicht schnell genug war

EDIT:.. aktualisiert Code Dies ist der vollständige Code für diese Methode ist meine Gewohnheit TableViewCell alloc falsch hier

+0

Nicht offensichtlich, welches Ergebnis Sie eigentlich erreichen möchten. Wenn der MKMapView-Delegat die Zelle ist, müssen Sie den Delegaten möglicherweise in der Zelle -dealloc aufheben. Ich kann auch nicht herausfinden, was dein Nib-Laden tun soll. –

+0

Ich habe das jetzt dank gemacht. Denke, es könnte sein, dass du es weißt. Soll ich die MapView auch hier veröffentlichen? –

+0

@tc Dealloc schien die Zelle zu arbeiten. Setzen Sie das als Antwort und ich gebe Ihnen das grüne Häkchen! –

Antwort

1

Dank tc für die Antwort (der Kommentar oben).

Was erforderlich war, war für mich, die MKMapView in der benutzerdefinierten UITableViewCell Dealloc-Methode zu veröffentlichen.

1

Versuchen Sie, den Bereich der Einstellung? map/den Umfang der Karte zu dem, was Sie wünschen und ändern Sie dann die Eigenschaften von userInteractionEnabled und zoomEnabled. Also wahrscheinlich so etwas:

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]; 

Und dann für die Eigenschaften versuchen Sie dies:

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