2014-10-17 3 views
0

지도의 중심에 현재 사용자 위치를 유지하면서 모든 주석을 내 MKMapView에 맞추려고합니다.사용자 위치를 유지하면서 MKMapView에서 주석 달기

지도에서 주석을 맞추기 위해 영역을 축소하는 방법에 대해서는 이미 많은 참고 문헌 [1] [2]이 있지만 현재 중심 위치를 조정합니다. 모든 주석이 현재 사용자 위치의 동쪽에 있으면 현재 사용자 위치가지도의 왼쪽으로 이동하도록 조정됩니다.

표시되는 모든 주석에 맞도록지도를 확대/축소하려면 어떻게합니까? 사용자를지도 중앙의 현재 위치로 유지 하시겠습니까?

참고 문헌 :

[1] Zooming MKMapView to fit annotation pins?

[2] - (void)showAnnotations:(NSArray *)annotations animated:(BOOL)animated NS_AVAILABLE(10_9, 7_0);

+1

다음을 시도 상속 제의 방법으로 구현 내 방법 (입니다. 사용자 위치에서 주석에 최대 거리를 얻기 그런 다음 사용자 중심 영역을 설정하는 MKCoordinateRegionMakeWithDistance를 사용 maximumDistance의 위도/장거리 거리가있는 위치 * 2 – Anna

+0

어제 같은 결론에 도달했지만 좋은 결과였습니다. 그러나 'MKCoordinateRegionMakeWithDistance' 변수가'latitudinalMeters '와'longitudinalMeters ' '나는 현재 같은 것으로 설정하고 있지만 쉽게 할 수 있을지 확신하지 못합니다. 몇 분 안에 메서드를 게시 할 것입니다. –

+0

예, 둘 다 동일한 값으로 전달할 수 있으며지도보기는 표시 할 수있는보기 및 확대/축소 비율에 따라 자동으로 조정됩니다. – Anna

답변

1

내가 가장 신뢰할 수있는이 솔루션을 발견하고는 확인 해결책이 될 수 있도록 @Anna뿐만 아니라 그것을 제안했다.

MKMapView

- (void)fitAnnotationsKeepingCenter { 
    CLLocation *centerLocation = [[CLLocation alloc] 
    initWithLatitude:self.centerCoordinate.latitude 
    longitude:self.centerCoordinate.longitude]; 

    // starting distance (do not zoom less than this) 
    CLLocationDistance maxDistance = 350; 

    for (id <MKAnnotation> vehicleAnnotation in [self annotations]) { 
    CLLocation *annotationLocation = [[CLLocation alloc] initWithLatitude:vehicleAnnotation.coordinate.latitude longitude:vehicleAnnotation.coordinate.longitude]; 
    maxDistance = MAX(maxDistance, [centerLocation distanceFromLocation:annotationLocation]); 
    } 

    MKCoordinateRegion fittedRegion = MKCoordinateRegionMakeWithDistance(centerLocation.coordinate, maxDistance * 2, maxDistance * 2); 
    fittedRegion = [self regionThatFits:fittedRegion]; 
    fittedRegion.span.latitudeDelta *= 1.2; 
    fittedRegion.span.longitudeDelta *= 1.2; 

    [self setRegion:fittedRegion animated:YES]; 
}