2016-10-23 5 views
1

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과 그 4 점, loc2, loc3, loc4에 의해 설정된 영역의 차이점을 (어쨌든) 확인하려고 생각했지만 어떻게 처리해야할지 모르겠다. 그걸 도와 줄 수있어?

답변

1

주석의 위치를 ​​4 개의 가장자리 모두 비교하지는 않지만 중심 위치에서 거리를 확인하십시오.

let distance = center.distanceFromLocation(annotationLocation) 

이 거리가 특정 반경보다 큰 경우 주석은 가장자리 중 하나에 가깝습니다.

if distance > radius { 
    //center annotation 
} 

반경은 범위 범위에서 계산할 수 있습니다.

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

왜 0.3을 곱하면됩니까? –

+0

그것은 정의 할 수있는 요소 일뿐입니다. – Hannes