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

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

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

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

Благодарю.

  • Применение преобразования к UITextView - предотвращение изменения содержимого
  • SceneKit: использовать преобразование или напрямую манипулировать параметрами вращения / положения, если целью является поворот камеры и узла узла узла X перед камерой?
  • Разрешить поворот для QLPreviewController независимо от родительского представления
  • Отключить вращение контроллера View в контроллере навигации
  • Вращение камеры в SceneKit
  • Как я могу предотвратить рождение ребенка из SKSpriteNode со своим родителем?
  • Вращение объекта OpenGL ES вокруг оси Z
  • Почему этот метод rotate дает мертвое пространство изображения? OpenCV
  • 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) 
    Interesting Posts

    React Native App падает на экране запуска на устройстве

    Использование ZBar для сканирования штрих-кодов VIN добавляет дополнительный символ «I»

    Почему мой звуковой файл .aif будет воспроизводиться только на симуляторе iOS, а не на устройстве?

    Tesseract trainingdata не работает в проекте Swift 3.0 с использованием версии 4.0

    UIPickerView, кажется, протекает каждый раз, когда я поворачиваю компонент

    Iphone / Ipad Добавить изображение и текст в заголовок навигации

    Неоднозначное использование оператора «+»

    xcode 8 beta – Сбор ошибок на реальном устройстве iOS

    Получить имя класса UIViewController в swift

    Добавить сегментированный элемент управления в панель навигации и сохранить заголовок с помощью кнопок

    iOS: используйте уведомление VOiP вместо «нормального» уведомления

    Может ли родной клиент iOS подключиться к серверу meteor.js?

    Количество начатых касаний не равно количеству готовых штрихов

    iOS Framework build: какова наилучшая практика для связи с сторонними библиотеками?

    Шифрование / расшифровка для изображения на IOS

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