在我的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
与这四个点loc1
,loc2
,loc3
,loc4
设置的区域之间的差异,但我和# 39;我不知道如何处理它。你能帮帮我吗?
答案 0 :(得分:1)
我不会将注释的位置与所有四个边缘进行比较,但请检查距中心位置的距离。
let distance = center.distanceFromLocation(annotationLocation)
如果此距离大于某个半径,则注释接近其中一个边。
if distance > radius {
//center annotation
}
可以从区域跨度计算半径。
let radius = min(region.span.longitudeDelta, region.span.latitudeDelta) * 0.3