只有在靠近屏幕边缘时,如何将地图置于注释视图中心?

时间:2016-10-23 18:07:04

标签: ios swift mkmapview mapkit mkannotation

在我的swift申请表中,我使用MapKit,并且我在地图中添加了一些注释。

目前,由于这个问题:Trying to get the span size in meters for an iOS MKCoordinateSpan我设法创建了一个功能,当用户按下它时,我的地图会在注释中居中。这是它的代码:

let span = mapView.region.span
let centerView = mapView.region.center

let loc1 = CLLocation(latitude: centerView.latitude - span.latitudeDelta * 0.5, longitude: centerView.longitude)
let loc2 = CLLocation(latitude: centerView.latitude + span.latitudeDelta * 0.5, longitude: centerView.longitude)
let loc3 = CLLocation(latitude: centerView.latitude, longitude: centerView.longitude - span.longitudeDelta * 0.5)
let loc4 = CLLocation(latitude: centerView.latitude, longitude: centerView.longitude + span.longitudeDelta * 0.5)

let metersInLatitude = loc1.distance(from: loc2)
let metersInLongitude = loc3.distance(from: loc4)

let center:CLLocationCoordinate2D = (MyCustomAnnotation?.coordinate)!
let coordinateRegion = MKCoordinateRegionMakeWithDistance(center, metersInLatitude, metersInLongitude)
mapView.setRegion(coordinateRegion, animated: true)

并且效果很好 - 每当用户点击任何MyCustomAnnotation时,它都会在保持当前缩放级别的同时使地图居中。

我想稍微改变一下这个代码,所以只有当点接近屏幕的四个边缘之一时,才会将地图集中在点上。当注释点位于靠近屏幕中心的某个位置时 - 我们不应将地图居中。我该怎么做?我考虑过(以某种方式)检查MyCustomAnnotation?.coordinate与这四个点loc1loc2loc3loc4设置的区域之间的差异,但我和# 39;我不知道如何处理它。你能帮帮我吗?

1 个答案:

答案 0 :(得分:1)

我不会将注释的位置与所有四个边缘进行比较,但请检查距中心位置的距离。

let distance = center.distanceFromLocation(annotationLocation)

如果此距离大于某个半径,则注释接近其中一个边。

if distance > radius {
    //center annotation
}

可以从区域跨度计算半径。

let radius = min(region.span.longitudeDelta, region.span.latitudeDelta) * 0.3