2015-01-10 1 views
3

일부 주석이 달린 앱이 있는데 지금까지는 기본 동작 (예 : 숫자 및 문자)이 잘 보이는 기호 만 사용했습니다. 방향은 적절한 장치로 방향이 고정됩니다.지도와 함께 회전하는 MKAnnotationViews 구현 방법

그러나 실제지도의 방향을 고정해야하는 주석이 필요합니다. 따라서지도가 회전하면 주석 기호가 함께 회전해야합니다 (예 : 강 흐름을 나타내는 화살표와 같이) .

지도를 오버레이처럼 크기 조정하고 싶지는 않지만지도와 함께 회전 시키길 원합니다.

사용자가 손가락으로지도를 수동으로 회전 할 때 및 제목 모드로 추적하여 회전 할 때 주로 작동하는 솔루션이 필요합니다. (적어도 안드로이드에) 구글 맵이 내가 너무 많이 더 어려워 iOS에서되지 않습니다 확신 (사실) 간단한 MarkerOptions.flat

매우 쉽다에

, 나는 희망한다.

미리 감사드립니다.

+0

나는 지역 DidChangeAnimated 내부에서 MkMapCamera를 사용하여 좀 더 가까이에 와서 관련 주석을 회전 시켰지만 사용자가지도를 회전하는 동안 재미있어 보였으며 사용자가 회전을 완료 한 후에 올바른 방향으로 스냅합니다 . android MarkerOptions.flat (true)와 똑같은 동작을 원합니다. 사용자가 회전하는 동안 주석의 방향이지도에 고정되기를 원합니다. – Kurt

+0

그리고 내가 직접 회전시킬 때 그것은 회전하는 상징이 아니라 툴팁이 재미있는 각도로 나온다! 나는 이것을 할 수있는 방법이 없다고 생각하기 시작했습니다! – Kurt

+1

이것은'MKOverlayRenderer'의 유스 케이스 일 것이라고 생각합니다. 오버레이 다각형이지도 데이터와 함께 회전하는 것처럼 두 지리적 점 사이의 방향에 따라 자신을 정렬하여지도와 함께 회전 할 수 있습니다. 테스트 할 시간을 찾고 예제를 통해 증명할 수 있다면이를 답변으로 올리겠습니다. – Tommy

답변

3

다음은 내가 비슷한 것을 사용했습니다.

- (void)rotateAnnotationView:(MKAnnotationView *)annotationView toHeading:(double)heading 
{ 
    // Convert mapHeading to 360 degree scale. 
    CGFloat mapHeading = self.mapView.camera.heading; 
    if (mapHeading < 0) { 
     mapHeading = fabs(mapHeading); 
    } else if (mapHeading > 0) { 
     mapHeading = 360 - mapHeading; 
    } 

    CGFloat offsetHeading = (heading + mapHeading); 
    while (offsetHeading > 360.0) { 
     offsetHeading -= 360.0; 
    } 

    CGFloat headingInRadians = offsetHeading * M_PI/180; 
    annotationView.layer.affineTransform = CGAffineTransformMakeRotation(headingInRadians); 
} 

그리고, 이것은 사용자가지도를 회전하는 동안

불행하게도,이 솔루션이 회전하지 않는 등 regionDidChange에서라고하지만, 그것은 적절한 제목이 있는지 확인하기 위해 나중에 저절로 해결 . 애니메이션 블록에 affineTransform 중 일부를 포장하여보기 좋게 만듭니다.

이 정보가 도움이되거나 도움이 될 수 있기를 바랍니다.

관련 문제