Ручная установка кадра MKOverlayView (или подпредставления)

У меня есть представление, которое я использую в качестве наложения на MKMapView (он использует OpenGL для рисования). Для правильного выполнения рисования кадр glView должен быть точно таким же, как кадр mapView. Я также не могу иметь представление просто поверх карты, потому что я хочу, чтобы другие аннотации и наложения были поверх него.

Я пытался это сделать, создав MKOverlayView, который ограничиваетMapRect = MKMapRectWorld. Затем я добавляю glView в качестве подпредставления к overlayView и вручную устанавливаю glView.frame = mapView.frame. Проблема в том, что рамка glView использует другую систему координат, чем mapView.

Рамка mapView находится в координатах, которые вы ожидаете для стандартного представления (что-то вроде 0,0,320,250). Кажется, что кадр glView использует MKMapPoints в качестве своей координатной базы.

Итак, моя идея заключалась в том, чтобы сделать что-то подобное в моем подклассе MKOverlayView ...

glView.frame = [self rectForMapRect:[mapView visibleMapRect]];

Это дает мне прямоугольник с правильными координатами (что-то вроде 61612032.000000, 105586688.000000, 5275648.000000, 5685248.000000), но он не идеально согласован с картой. Направление Y отключено, а зум также иногда бывает неправильным.

Итак, мой вопрос будет таким.

  1. Есть ли способ просто установить фрейм MKOverlayView (или одно из его подпредставлений) с использованием обычных экранных координат?
  2. Или есть другой способ достичь того же, чего мне просто не хватает?

person Ross Kimes    schedule 20.11.2011    source источник


Ответы (1)


Вы можете преобразовать cgpoint в mkmappoint с помощью метода mkoverlay - (MKMapPoint)mapPointForPoint:(CGPoint)point

Я надеюсь это поможет тебе

ИСТОЧНИК: http://developer.apple.com/library/ios/documentation/MapKit/Reference/MKOverlayView_class/Reference/Reference.html#//apple_ref/occ/instm/MKOverlayView/mapPointForPoint:

person Garoal    schedule 27.11.2011