2012-04-04 8 views
0

私は場所のピンを持つ地図を持っているアプリを持っていますが、私はそれを変更してユーザの場所をズームインしたいのです。MapKitズーム質問

デフォルトでは、座標は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 
+0

誰ですか?それは簡単な間違いでなければなりませんが、私はそれを見ることができません。 – user1313926

+0

コードは大丈夫です。デリゲートメソッドが呼び出されていることを確認してください(ブレークポイントまたはNSLogをそこに置く)か?そのデリゲートメソッドでは、setRegion行の直前に 'NSLog(@" map =%@ "、map);を入れ、それが何を表示するかを見てください。アプリ内の他の場所でマップ領域を更新していますか? – Anna

+0

@MDTこれは私のコードですが、デバッグするために出力しようとしましたが、Xcodeをアップグレードしてからログに記録されているようです(古いデバッグコンソールは正常に動作しました) – user1313926

答えて

0

viewDidLoadでは、この行は何もしません。コンパイラは、その行の「未使用の式の結果」として警告を与えるべきである

[[CLLocationManager alloc] init]; 


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

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


ところで、 viewDidLoadでは、[self addAnnotations];を2回呼びますから、最後に[super viewDidLoad]と呼ぶ方が良いと思います。

+0

@Annaに感謝しました。私は今、マップの周りをナビゲートする能力を失ってしまった、それは中心に戻ってゴムバンド。何か案は? – user1313926

+0

didUpdateToLocationメソッドは、ユーザーの場所が更新されるたびに呼び出され続け、そこにあるコードがユーザーに再センタリングし続けます。最初の更新だけを拡大するには、そのメソッドの最後に '[manager stopUpdatingLocation];を呼び出します。 – Anna

+0

あなたは救い主です..多くのありがとう – user1313926