2013-03-05 2 views
0

У меня есть небольшая проблема, которая говорит о моем непонимании Obj C.Initializing просмотров (MapKit пример)

Я сделал небольшое приложение с корневым меню и кнопкой, которая подключается к другой точке зрения (карта). Моя проблема заключается в установке местоположения по умолчанию на карте при загрузке. В моем коде внутри MapViewController.m я включил функцию:

- (void)viewWillAppear:(BOOL)animated { 
    CLLocationCoordinate2D zoomLocation; 
    zoomLocation.longitude= desired_longitude; 
    zoomLocation.latitude = desired_latitude; 

    MKCoordinateRegion viewRegion = MKCoordinateRegionMakeWithDistance(zoomLocation, 4*METERS_PER_MILE, 4*METERS_PER_MILE); 

    [self.mapOutlet setRegion:viewRegion animated:YES];} 

Теперь, когда я сначала запустить приложение и нажать на кнопку карты в корневое меню, карта центрируется где-то в Атлантическом океане. Но если я вернусь в корневое меню и снова нажму кнопку карты, карта будет сосредоточена в нужном месте! Я попытался поместить этот код внутри метода viewDidLoad с тем же результатом.

Может ли кто-нибудь объяснить мне, как это решить и, что более важно, как это работает? Какой метод (ы) вызывается при появлении нового представления? Например, мне кажется странным, что только включив вышеупомянутый метод в файл реализации, этот метод выполняется без моего вызова (на данный момент только после второй навигации по карте, но все же) ...

ответ

0

-(void)viewWillAppear:(BOOL)animated - унаследованный метод от UIViewController. Он вызывается каждый раз, когда появится ваш взгляд. Вот почему код выполняется без вашего вызова, он называется частью представления и связанной с ним реализации контроллера в iOS.

Это код я использую, чтобы установить MKMapView в местоположение по умолчанию внутри viewWillAppear:

#define kMapDeltaLat 0.586746 
#define kMapDeltaLon 0.878906 

@interface MapViewController() 
//other properties here 
@property bool firstDisplay; 
@end 

... 
- (void)viewWillAppear:(BOOL)animated 
{ 
    if (self.firstDisplay) { 
     //zoom in and set the region where we want 
     MKCoordinateRegion region; 
     MKCoordinateSpan span; 
     region.center = self.map.region.center; 
     span.latitudeDelta = kMapDeltaLat; 
     span.longitudeDelta = kMapDeltaLon; 
     region.span = span; 
     [self.map setRegion:region animated:NO]; 
     CLLocationCoordinate2D myLoc = CLLocationCoordinate2DMake(50.245, -1.787); 
     [self.map setCenterCoordinate:myLoc animated:YES]; 
     self.firstDisplay = NO; 
    } 
} 

области карты определяет, что его точка зрения будет выглядеть (т.е. как увеличенные в нем). Координата центра определяет, где находится карта.

+0

Спасибо за ваш ответ, но я боюсь, что моя проблема не устранена. Как я уже сказал, в первый раз, когда я перехожу к mapview (из корневого меню), симулятор показывает где-то рядом с Антарктидой. После этого (если я вернусь к корню, а затем снова к mapview), все будет работать так, как ожидалось. Более того, если я вставляю точку останова в последнюю строку viewWillAppear вашего кода, код, кажется, будет выполнен (как вы сказали) до того, как появится первая карта, но все же карта окажется центрированной в антарктике ... Может быть, Я что-то делаю – user2135738