MKMapView setRegion crash

Invalid Region <center:+0.00000000, +0.00000000 span:+180.00000000, +361.00000000>

今天来解决MKMapView setRegion程序奔溃的问题,具体提示错误信息为:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Invalid Region <center:+0.00000000, +0.00000000 span:+180.00000000, +361.00000000>'

我们设置mapView的region时,会创建一个region对象,region包含两块信息,一个是coordinate2D,一个是coordinateSpan,coordinate2D包含经纬度信息,coordinateSpan包含经纬度跨度信息:

1
2
3
4
let coordinate2D = CLLocationCoordinate2D(latitude: -31, longitude: 179)
let span = MKCoordinateSpan(latitudeDelta: 180, longitudeDelta: 360)
let region = MKCoordinateRegion(center: coordinate2D, span: span)
mapView.setRegion(region, animated: true)

先来简单说下iOS中的经纬度范围:

经度,以本初子午线为分界线(longitude为0),向东为东经,向西为西经,东经为正数(0180),西经为负数(-1800),所以经度的范围是:-180~180;

纬度,以赤道为分界线(latitude为0),向北为北纬,向南为南纬,北纬为正数(090),南纬为负数(-900),所以纬度的范围是:-90~90;

再来看一下经纬度跨度范围:

MKCoordinateSpan是mapView的展示区域范围,由于经度范围是-180180,纬度范围是-9090,所以loatitudeDelta范围是0360,latitudeDelta范围是0180,也就是mapView显示最大经度范围是360度,最大纬度范围是180度

注意

在iOS中,经纬度数值与显示跨度范围必须在上面提到的范围之内,不然就会出现上面的错误信息。