我尝试使用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,所以我不知道它为什么不起作用。
谢谢,
雅各
答案 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描述。