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