2012-07-10 4 views
0

У меня есть рендеринг пути на моей карте. У меня есть ряд путевых точек, и я имитирую движение через них.ios MapKit, по пути

При изменении области отображения появляется, что моя координата при преобразовании в CGPoint является floorf по реализации Apple. Это вызывает очень неустойчивый внешний вид, а не гладкий.

Есть ли все-таки обойти это?

[m_mapView setRegion: MKCoordinateRegionMake(coord, MKCoordinateSpanMake(0, 0))]; 

Затем карта пытается сосредоточиться на данной заданной точке. Однако точка не может быть выровнена по пикселям, так как может отображаться следующая функция.

CGPoint point = [m_mapView convertCoordinate:coord toPointToView:m_mapView]; 

Таким образом, mapview погладил результат центральной точки, чтобы выровнять все пиксели базовой карты.

+0

Координаты, о которых вы говорите? когда вы меняете регион карты с помощью 'setRegion: animated:' не задействован CGPoint. – Felix

+0

Я обновил свой вопрос для ясности. Это помогает? – Nico

+0

В этом специальном случае вы можете использовать m_mapView.center – Felix

ответ

0

Я делаю вид больше, чем экран, чтобы учитывать смещение и избежать обрезки.

Я имитирую точку, перемещающуюся по маршруту, и поместите ее с помощью аннотации, а затем центрируйте эту точку со скоростью 30 кадров в секунду.

Предположим, что координата - это положение движущейся точки.

[m_mapView setCenterCoordinate: coord]; 

CGPoint p = [m_mapView convertCoordinate:m_mapView.centerCoordinate toPointToView:m_mapView]; 
CGPoint p1 = [m_mapView convertCoordinate:coord toPointToView:m_mapView]; 

CGPoint offset = CGPointMake(p.x - p1.x, p.y - p1.y); 
CGRect frame = CGRectInset(CGRectMake(0.0f, 0.0f, 1024.0f, 1024.0f), -50.0f, -50.0f); 
frame.origin.x+= offset.x; 
frame.origin.y+= offset.y; 
[m_mapView setFrame: frame]; 
Смежные вопросы