MKMapView setRegion不起作用

时间:2014-03-30 23:44:36

标签: ios maps mapkit

我尝试使用MKMapView的setRegion在iOS应用中设置自定义起始区域。该应用运行良好,并出现一个地图,但无论我尝试什么,我都无法改变该地区。我尝试了很多教程和解决方案,但没有一个正在运行。这是我的代码:

-(void)viewDidAppear:(BOOL)animated{
    MKCoordinateRegion region;
    MKCoordinateSpan span;
    span.latitudeDelta  = 0.001;
    span.longitudeDelta = 0.001;

    region.span = span;
    region.center.latitude = 100;
    region.center.longitude = 100;

    [mapView setRegion:(region) animated:(TRUE)];
}

我正确地将MKMapView和Core Location框架添加到项目中,我导入了MapKit.h,并且我声明了mapView,所以我不知道它为什么不起作用。

谢谢,

雅各

2 个答案:

答案 0 :(得分:3)

听起来地图视图的IBOutlet未连接到xib / storyboard中的地图视图控件。

如果没有连接,mapView变量将为nil,其上的调用方法将无效。

在xib / storyboard中,右键单击View Controller并将mapView插座连接到地图视图控件。


<小时/> 此外,虽然不需要仅设置区域,但也将地图视图的delegate插座连接到View Controller。如果稍后实现任何地图视图委托方法,则需要这样做。如果不这样做,则不会调用委托方法。


另一个单独的观点:
在您的第一个代码示例中,您将区域的center设置为100,100。请注意,这是一个无效的坐标。如果地图视图实际已连接,则将center设置为此将导致“无效区域”崩溃。纬度必须在-90到+90之间(经度必须在-180到+180之间)。

顺便说一下,您在评论(26,80)中发布的代码中尝试的新坐标位于印度。由于您将跨度设置为相对较小的值,因此您需要缩小很多才能看到这一点。

答案 1 :(得分:0)

然而,它被设置为已回答,我将在这里放一个对我有用的例子,当时我不知道为什么setRegion根本不起作用。在我的情况下,问题是我发起了没有框架的MKMapView,例如:

override func viewDidLoad() {
  ...
  self.mapView = MKMapView() // Wrong!
  ...
  self.mapView.setRegion(...) // Does not work!
}

看起来整个区域事物的计算方法与初始值(CGRect)有关。这对我有用:

override func viewDidLoad() {
  ...
  self.mapView = MKMapView(frame: CGRect(0, 108, self.mapView.bounds.width, self.mapView.bounds.height))
  self.mapView.setRegion(...) // Oh, it works!
}

此问题也被here描述。