0

場所のピンが付いた地図を持つアプリを持っていますが、ユーザーの場所にズームインするように変更したいと考えています。

デフォルトでは、座標 0,0 (アフリカ沖) から開始されますが、現在は英国に向けられていますが、ストリート レベルにズームインすることはできません。設定Deltaをいじっても変わらない。

これが私が使用しているコードです。

#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
4

1 に答える 1

0

ではviewDidLoad、次の行は何もしません。

[[CLLocationManager alloc] init];

コンパイラは、その行に「式の結果が使用されていません」などの警告を表示する必要があります。


実際にそのコードの結果をlocationManager変数に割り当てる必要があり、delegateそれ以外の場合はデリゲート メソッドが呼び出されないように設定する必要があります。

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


ところでviewDidLoad、あなたは 2 回呼び出していますが、最後ではなく最初に[self addAnnotations];呼び出したほうがよいと思います。[super viewDidLoad]

于 2012-04-05T16:31:56.257 に答える