У меня есть представление, которое я использую в качестве наложения на 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 отключено, а зум также иногда бывает неправильным.
Итак, мой вопрос будет таким.
- Есть ли способ просто установить фрейм MKOverlayView (или одно из его подпредставлений) с использованием обычных экранных координат?
- Или есть другой способ достичь того же, чего мне просто не хватает?