2013-03-05 72 views
0

我有告訴我缺乏OBJ的理解C.初始化次(例如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的最後一行插入一個斷點,代碼似乎在地圖第一次出現之前就會被執行(如你所說),但是地圖仍然出現在antarctica的中心...也許我正在做點什麼 – user2135738 2013-03-05 15:39:09