2013-03-05 77 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