2012-04-04 4 views
0

Ich habe eine App, die eine Karte mit Pins für Standorte hat, aber ich möchte es ändern, so zoomt auf den Standort des Benutzers.MapKit Zoom Fragen

Standardmäßig beginnt es bei den Koordinaten 0,0 (vor der Küste von Afrika), aber jetzt ist es in der UK, aber ich kann es nicht auf Straßenebene zoomen. Wenn ich die Delta Einstellungen anpasse, macht es keinen Unterschied.

Hier ist der Code, den ich verwende.

#import "FirstViewController.h" 
#import "MapPin.h" 

@implementation FirstViewController 

@synthesize map; 
@synthesize locationManager , location; 


-(void)addAnnotations{ 

    // Normally read the data for these from the file system or a Web service 
    CLLocationCoordinate2D coordinate = {53.0670, -2.521}; 
    MapPin *pin = [[MapPin alloc]initWithCoordinates:coordinate 
              placeName:@"Mr Shoe - Gents,Ladies,Kids" 
             description:@"01270 626767, 123 Your Street, CW5 5NA" 
        ]; 

    [self.map addAnnotation:pin]; 

    [pin release]; 

    // Normally read the data for these from the file system or a Web service 
    CLLocationCoordinate2D coordinate2 = {53.0659, -2.521}; 
    MapPin *pin2 = [[MapPin alloc]initWithCoordinates:coordinate2 
              placeName:@"Veg-is-us - Fruit & veg" 
              description:@"01270 626767, 123 Your Street, CW5 5NA" 

        ]; 

    [self.map addAnnotation:pin2]; 


    [pin2 release]; 

    CLLocationCoordinate2D coordinate3= {53.06879, -2.52195}; 
    MapPin *pin3= [[MapPin alloc]initWithCoordinates:coordinate3 
              placeName:@"PC Centre Nantwich" 
              description:@"01270 626767, 15c Beam street, CW5 5NA" 

        ]; 

    [self.map addAnnotation:pin3]; 


    [pin3 release]; 
} 

// The designated initializer. Override if you create the controller programmatically and want to perform customization that is not appropriate for viewDidLoad. 
/* 
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { 
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
if (self) { 
// Custom initialization. 
} 
return self; 
} 
*/ 


// Implement viewDidLoad to do additional setup after loading the view, typically from a nib. 
- (void)viewDidLoad { 

    [[CLLocationManager alloc] init]; 
    locationManager.desiredAccuracy = kCLLocationAccuracyBest; 
    [locationManager startUpdatingLocation]; 
    [self addAnnotations]; 
     [self addAnnotations]; 


    [super viewDidLoad]; 
} 
-(void) locationManager: (CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation { 
    location = newLocation.coordinate; 
    //One location is obtained.. just zoom to that location 

    MKCoordinateRegion region; 
    region.center=location; 
    //Set Zoom level using Span 
    MKCoordinateSpan span; 
    span.latitudeDelta=0.4; 
    span.longitudeDelta=0.4; 
    region.span=span; 
    NSLog(@"map=%@", map); 
    [map setRegion:region animated:TRUE]; 

} 

/* 
// Override to allow orientations other than the default portrait orientation. 
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
// Return YES for supported orientations. 
return (interfaceOrientation == UIInterfaceOrientationPortrait); 
} 
*/ 

- (void)didReceiveMemoryWarning { 
    // Releases the view if it doesn't have a superview. 
    [super didReceiveMemoryWarning]; 

    // Release any cached data, images, etc. that aren't in use. 
} 

- (void)viewDidUnload { 
    [super viewDidUnload]; 
    // Release any retained subviews of the main view. 
    // e.g. self.myOutlet = nil; 
} 


- (void)dealloc { 
    [super dealloc]; 
} 


@end 
+0

jemand? es muss ein einfacher Fehler sein, aber ich kann es nicht sehen, – user1313926

+0

Code sieht ok aus. Sind Sie sicher, dass die Delegate-Methode aufgerufen wird (setzen Sie dort einen Breakpoint oder NSLog)? Stellen Sie in dieser Delegate-Methode, direkt vor der setRegion-Zeile, 'NSLog (@" map =% @ ", map);' und sehen Sie, was gedruckt wird. Aktualisieren Sie die Kartenregion an anderer Stelle in Ihrer App? – Anna

+0

@MDT Dies ist mein Code, ich habe versucht, zu debuggen, aber es scheint nicht zu loggen, da ich Xcode aktualisiert (alte Debug-Konsole arbeitete ok) – user1313926

Antwort

0

In viewDidLoad geht diese Linie nichts tun:

[[CLLocationManager alloc] init]; 

Der Compiler sollte auf dieser Linie eine Warnung wie „Expression Ergebnis ungenutzt“ geben.


Sie tatsächlich benötigen, um das Ergebnis dieser Code an die locationManager Variablen zuweisen und Sie müssen die delegate sonst die Delegatmethoden aufgerufen werden nicht eingestellt werden:

self.locationManager = [[CLLocationManager alloc] init]; 
locationManager.delegate = self; 


By the way, in viewDidLoad, Sie rufen [self addAnnotations]; zweimal und ich denke, es ist besser, [super viewDidLoad] zuerst anstelle der letzten zu nennen.

+0

danke @Anna Ich habe es ein wenig und es und es jetzt zoomt in dem ist super, vielen dank für die rette mich mehr kopf hämmern, aber ich habe die fähigkeit verloren jetzt um die karte zu navigieren, es gummibänder zurück in die mitte. Irgendwelche Ideen? – user1313926

+0

Die Methode didUpdateToLocation wird immer dann aufgerufen, wenn der Benutzerstandort aktualisiert wird und der darin enthaltene Code sich immer wieder auf den Benutzer konzentriert. Um nur das erste Update zu vergrößern, rufen Sie am Ende dieser Methode '[manager stopUpdatingLocation];' auf. – Anna

+0

Sie sind ein Retter .. vielen Dank – user1313926