我有一个小问题,说明我对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方法中,但结果相同。
有人可以解释我如何解决这个问题,更重要的是,这是如何解决的?出现新视图时会调用哪种方法?例如,我觉得只有通过在实现文件中包含上述方法才会感到奇怪,这个方法是在没有我调用的情况下执行的(此时仅在第二次导航到地图视图之后但仍然)...
答案 0 :(得分: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;
}
}
地图的区域定义了它的视图的样子(即它是如何放大的)。中心坐标定义了地图当前所在的位置。