2010-07-21 3 views
2

Iam, создающий приложение iphone, которое должно принимать широту и долготу из массива и должно находить и отображать карту с помощью настраиваемых аннотаций/контактов. Я использовал MapKit вот как:Инициализация карты с определенной широтой и долготой Iphone

//MapViewController.h 

#import <UIKit/UIKit.h> 
#import <MapKit/MapKit.h> 

@interface MapViewController : UIViewController <MKMapViewDelegate> { 
IBOutlet MKMapView *mapView; 
MKPlacemark *mPlacemark; 
} 

@property (nonatomic, retain) IBOutlet MKMapView *mapView; 
@end 


//MapViewController.m 

#import "MapViewController.h" 
#import <MapKit/MapKit.h> 

@implementation MapViewController 
@synthesize mapView; 


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

    CLLocationCoordinate2D location = mapView.userLocation.coordinate; 
    MKCoordinateRegion region; 
    MKCoordinateSpan span; 

    location.latitude = 37.250556; 
    location.longitude = -96.358333; 

    span.latitudeDelta = 0.05; 
    span.longitudeDelta = 0.05; 

    region.span = span; 
    region.center = location; 

    [mapView setRegion:region animated:YES]; 
    [mapView regionThatFits:region]; 
} 

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


@end 

Это не находит место для широты и долготы. Пожалуйста помоги.

+2

Пожалуйста, в следующий раз отформатируйте свой код перед публикацией (выберите его и нажмите кнопку «010101» на панели инструментов. И не включайте части кода, которые явно не нужны - вам будет намного легче помочь вам. – Vladimir

+0

уверен, что сделает следующий раз ... – binbash

ответ

1

Я сделал образец проекта с вашим кодом, и он отлично работает - карта попадает в ожидаемую (кажется) область. Проверьте, если MAPview Ивар инициализируются (это соединение, установленное должным образом в IB?)

Edit: В своем коде вы только видимая область набора карт, но не добавлять аннотации к нему (кроме автоматически показывает текущее положение пользователя, который всегда в Купертино, если вы тестируете на симуляторе). Чтобы положить булавку вам карту нужно создать объект для подтверждения MKAnnotation протокола и добавить его в MAPview:

// Sample example just to show annotation 
// in your program you will likely need to use custom annotation objects 
CLLocation* myLocation = [[CLLocation alloc] initWithLatitude:37.250556 longitude:-96.358333]; 
[mapView addAnnotation:myLocation]; 

Некоторые (не очень уместно) комментарии на ваш код:

  • Вы не необходимо инициализировать переменную местоположения с текущим местоположением при перезаписывании ее значений координат сразу после этого
  • Почему вы звоните [mapView setNeedsDisplay]; в viewDidUnload? Я не уверен, что это может вызвать серьезные проблемы, но вы должны использовать этот метод для очистки памяти (например, для отпускания удерживаемых выходов), а не для перерисовки UI.
+0

Ну, это показывает карту с булавкой на калифорнии, купертино, которая является по умолчанию местом, но координаты, которые я дал в приведенный выше код должен закрепить его на Kansas.I удалили инициализацию и setNeedDisplay, но он выталкивает метку на купертино, а не канзас. – binbash

+0

Интересно, я не уверен, почему ваш фрагмент кода работает. 'CLLocation' на самом деле не соответствует на 'MKAnnotation' (но он работает, когда я запускаю этот код). – Nate

+0

@Nate, MKAnnotation proto col имеет только 1 требуемый метод - «координата» и CLLocation имеет тот, который не будет иметь проблем во время выполнения, хотя, скорее всего, компилятор выдает предупреждение, когда вы добавляете CLLocation в качестве аннотации к mapview. Во всяком случае, это был всего лишь пример, и в реальной жизни вы должны использовать пользовательские объекты, которые соответствуют протоколу MKAnnotation – Vladimir

0

Установили ли вы свою карту, чтобы следить за местоположением пользователя в другом месте ? возможно, это по умолчанию отменяет ваше ручное движение карты в Канзас.

Редактировать Do'h, не видел, что это был июль прошлого года. Ну, может быть, вы могли бы поделиться своим решением с нами, если это не проблема.

Смежные вопросы