2016-08-02 2 views
0

아래에서 다른보기로 덮인 MKMapView가 있습니다. 지도의 높이를 250이라고 가정합니다. 바닥에서 다른보기로 덮인 높이는 100입니다.지도의 일부가 덮여있을 때 가운데에있는 MKMapView

이제 setRegion을 사용하여지도의 중심에 배치하면 전체지도가 보이는 것처럼지도가 중앙에 배치되지만 실제로는 볼 수있는 영역, 즉 나머지 높이 150에 중심을 맞추어야합니다.

지도의 높이를 150 정도로 낮추면 덮지는 않겠지 만 디자인에 의해 덮여 야 할 필요가 있습니다. 덮개보기의 테두리가 완전히 너비에 맞지 않기 때문입니다. 면)이므로지도가 덮개보기 주변에 표시됩니다.

실제 볼 수있는 영역의 높이를 중심으로지도를 중앙에 배치하는 방법은 무엇입니까? 이제

나는 이것을 사용하고 있습니다 : 화면이 조금 더를 상쇄 조정하고자하는 경우 사용할 수있는,

[theMapView setVisibleMapRect:[theMapView mapRectThatFits:theMapRect] 
        animated:YES]; 

을 또는 :

CLLocationCoordinate2D loc = CLLocationCoordinate2DMake(lat, long); 
MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance (loc, 200, 200); 
[_map setRegion:region animated:YES]; 
+0

왜이 코드를 사용하지 않습니까? [_map setCenterCoordinate : loc animated : YES]'? –

+0

나는 그것을 시도 할 것이지만, 어떤 것이 이것이 문제를 해결하지 못한다고 말해 준다. 그러나 그것을 시도 할 것입니다. – luky

+0

시도 했습니까? @luky –

답변

1

사용해보십시오

[theMapView setVisibleMapRect:[theMapView mapRectThatFits:theMapRect] 
        edgePadding:UIEdgeInsetsMake(50, 50, 50, 50) 
        animated:YES]; 
+0

안녕하세요. 이것은 예상대로 작동했습니다. [_map setVisibleMapRect : [_ map visibleMapRect] edgePadding : UIEdgeInsetsMake (0, 0, heightOfMapCover, 0) animated : YES]; 문제는 하단 끼워 넣기 패딩의 다른 값이 다른지도 확대/축소를 강제하는 것입니다. 100처럼 하나의 확대/축소, 120 다른 줌 등이 이상한 행동. 그렇지 않으면 실제로 필요한 숫자만큼 지정된 숫자만큼 맵을 이동시킵니다. 감사합니다 – luky

+0

@ 루키, 그 문제는 나에게 아주 이상하게 들린다. 나는 줌이'UIEdgeInsets'가 아니라'MKMapRect'에 의해 제어된다고 생각합니다. http://stackoverflow.com/a/35614774/5165668에서 내 원래 게시물을 볼 수 있습니다. 지금이게 당신의 버그인지 사과 버그인지 확실하지 않습니다. – OlDor

0

당신이 이것을 알아 냈는지 확실하지는 않지만 여기에 해결책이 있습니다. Obj-C에 적응하기 쉬워야합니다.

let pointYouWantCentered = CLLocationCoordinate2D(latitude: lat, longitude: lon) 
pointYouWantCentered.latitude -= (mapView.region.span.latitudeDelta * 0.25) 
mapView.setCenter(pointYouWantCentered, animated: true) 

이렇게하면 화면의 위쪽에 포인트가 중앙에 배치됩니다. 화면의 하단 부분이 차지하는 부분을 알고있는 한 원하는 지점에지도의 중심을 조정할 수 있습니다. 예를 들어, 아래쪽 절반을 차지하는 뷰가 있다고 가정하면 화면의 위쪽 절반에 포인트가 중앙에 배치됩니다. 밑면이 밑면의 1/3을 차지하고 뷰의 상단 2/3에 중심을 맞추려면 다음을 수행하십시오.

let pointYouWantCentered = CLLocationCoordinate2D(latitude: lat, longitude: lon) 
pointYouWantCentered.latitude -= (mapView.region.span.latitudeDelta * (1.0/6.0)) 
mapView.setCenter(pointYouWantCentered, animated: true) 

희망이 있습니다.