0

我有一个小问题,说明我对 Obj C 缺乏了解。

我制作了一个带有根菜单和连接到另一个视图(地图)的按钮的小应用程序。我的问题是加载时在地图中设置默认位置。在我的 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 方法中,结果相同。

有人可以解释我如何解决这个问题,更重要的是,它是如何工作的?出现新视图时会调用哪些方法?例如,我觉得很奇怪,只有在实现文件中包含上述方法,这个方法在我没有调用的情况下执行(目前只是在第二次导航到地图视图之后,但仍然如此)......

4

1 回答 1

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;
    }
}

地图的区域定义了其视图的外观(即放大的程度)。中心坐标定义了地图当前所在的位置。

于 2013-03-05T13:20:45.803 回答