Ste*_*ord 5 objective-c core-location mapkit mkmapview
我正在使用此代码来设置一个区域MKMapView,使其居中pin并缩放以显示大约10km的区域.
CLLocationAccuracy accuracy = kCLLocationAccuracyKilometer;
MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(pin.coordinate, accuracy * 10.0f, accuracy * 10.0f);
[self.mapSubView setRegion:region animated:NO];
Run Code Online (Sandbox Code Playgroud)
运行纬度-90,经度-58.359001159667969的引脚坐标的代码时,region生成如下所示:

mapSubView绘制时发生崩溃: -
因未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'无效区域<center:-90.00000000,-58.35900116 span:+0.08953039,+ 1462142065660629.00000000>'
我第一次尝试解决此问题是检查"边缘"纬度/长度(-90,+ 90,-180,+ 180),这解决了这个问题.但是,如果纬度更改为-89.99999,则问题将返回.
我猜这是由于纬度存在的组合-90和/或区域跨度的经度三角洲是如此之大,导致在实际上是"这个世界的"一区:P
任何关于如何在任何坐标处围绕销钉居中的建议,显示~10km的区域,没有这种碰撞将是非常感谢.
@supp-f 答案是对的
斯威夫特 3解决方案:
func safeSetRegion(_ region: MKCoordinateRegion) {
let myRegion = self.mapView.regionThatFits(region)
if !(myRegion.span.latitudeDelta.isNaN || myRegion.span.longitudeDelta.isNaN) {
self.mapView.setRegion(myRegion, animated: true)
}
}
Run Code Online (Sandbox Code Playgroud)
我能够重现崩溃。我认为这是 SDK 中的一个错误。
这个测试也会失败,但不会崩溃:
MKCoordinateRegion region;
region.center.longitude = coord.longitude;
region.center.latitude = 90.f;//coord.latitude;
region.span.longitudeDelta = 0.02f;
region.span.latitudeDelta = 0.02f;
[self.mapView setRegion:region animated:NO];
Run Code Online (Sandbox Code Playgroud)
那将是一个稳定的版本。只有这里,地域才非常大。如果存在 NSNotFound,您可以测试增量值
| 归档时间: |
|
| 查看次数: |
1272 次 |
| 最近记录: |