Как правильно повернуть оверлей на карте?

Я создал пользовательский оверлей, который содержит геометрическую форму для приложения iOS. Я хотел бы повернуть его вокруг его центра (или, вернее, центра ограничивающегоMapRect). Из того, что я понимаю, использование CGContextRotateCTM (contextRef, angle) вращает оверлей, используя верхний левый угол boundingMapRect в качестве источника, поэтому, если я поворачиваю свой оверлей небольшим количеством по часовой стрелке, он появляется вниз и слева от его предыдущего местоположения.

Я подумал, что если бы я мог захватить начальный центр ограничивающего прямоугольника наложения, то центр после поворота затем я мог бы вычислить разность координат и переместить наложение с помощью CGContextTranslateCTM. Моя проблема заключается в том, что центральные местоположения были такими же до и после вызова CGContextRotateCTM. Есть ли способ заставить этот вызов вступить в силу, чтобы я мог получить новое местоположение центра? Есть лучший способ сделать это?

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

Благодарю.

2 Solutions collect form web for “Как правильно повернуть оверлей на карте?”

Вы пытались установить опорную точку для вращения? После установки anchorpoint вращение будет вокруг центра вида.

Что-то вроде:

[yourView.layer setAnchorPoint:CGPointMake( 0.5, 0.5 )]; // center of the view 

Дополнительную информацию см. В документах Apple .

Вот мое решение, бегите по быстрому 3:

Предположим, что centerPoint – это CGPoint который вы хотите повернуть.

 let a = sqrt(pow(centerPoint.x, 2.0) + pow(centerPoint.y, 2.0)) let sub1 = (centerPoint.y / a) * cos(angle / 2.0) let sub2 = (centerPoint.x / a) * sin(angle / 2.0) let deltaX = -2 * a * sin((0 - angle) / 2.0) * (sub1 + sub2) let sub3 = (centerPoint.x / a) * cos(angle / 2.0) let sub4 = (centerPoint.y / a) * sin(angle / 2.0) let deltaY = 2 * a * sin((0 - angle) / 2.0) * (sub3 - sub4) context.translateBy(x: deltaX, y: deltaY) context.rotate(by: angle) 
  • Преобразование и поворот в Scenekit
  • Ошибка вращения UIPageViewController + Auto Layout
  • layoutSubviews, вызываемый дважды при вращении
  • Перетаскивание + поворот с помощью UIPanGestureRecognizer.
  • Вращение UIButton на 90 градусов при каждом нажатии кнопки
  • iPad modal controller уволен после вращения
  • Вращение AVCaptureSession
  • iOS Rotate View Controller, когда контроллер Modal View вращается
  • viewWillTransitionToSize приводит к изменению размера и перемещению невращающегося контроллера
  • Повернуть UIButton на 360 градусов - Swift
  • Регулировка просмотров, когда строка состояния скрывается при вращении
  • Interesting Posts

    Точка останова Xcode не работает внутри блока dispatch_async

    Как обращаться с автореализованными объектами в iOS с ARC

    Я не хочу, чтобы кнопка назад была усечена

    Xcode 9 Storyboard: произошла внутренняя ошибка. возможности редактирования могут быть ограничены

    Должен ли я установить ссылку на блок на nil после выполнения?

    Переход от третьего четвертого контроллера представления к контроллеру корневого представления swift

    Видео, воспроизводимое с помощью AVPlayer, имеет серое направление вверх и стороны на iPhone 6S Plus

    Возможно ли использовать вспышку в iPhone, когда приложение является фоновым?

    Как я могу проверить, что я запущен в заданной очереди GCD без использования dispatch_get_current_queue ()?

    Как интегрировать плату arduino с домашним комплектом Apple, возможно ли это или нет?

    Иногда вход в Twitter

    Программа командной строки C для Swift

    Опубликовать изображение на facebook с помощью FBSDK 4.x для iOS

    Ошибка CoreAudio – AVAudioIONodeImpl.mm:365: _GetHWFormat: обязательное условие ложно: hwFormat

    Как добиться эффекта параллакса с образцом изображения?

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.