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

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

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

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

Благодарю.

  • Перетаскивание + поворот с помощью UIPanGestureRecognizer.
  • Как принять во внимание поворот экрана при проектировании 3D-сцены?
  • Фиксация изображения ios7 в холсте с поворотом и масштабированием
  • изменение подзонов при вращении на ios
  • Почему viewWillTransitionToSize имеет неправильный размер?
  • Вращение AVCaptureSession
  • Сдвиг контроллера iOS после поворота
  • Как получить решение для остановки / возобновления работы CABasicAnimation?
  • 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

    Разница между deviceRGB и калиброванным RGB в Interface Builder?

    Изменение языка в приложении iOS в автоматическом макете

    При нажатии FBLikeControl отображается пустая страница и возвращается в приложение.

    Localizable.strings в iOS, а не локализованные языки

    Уведомления о ключах backspace iOS

    Реализация UIScrollView

    Как передать URL-адрес на кнопку в ios без преобразования NSData

    Тест-устройства Admob, не показывающие симулятор udid

    Измените конкретный код UIWebView, чтобы иметь адресную строку, похожую на Safari

    Есть ли способ получить shadowPath для текста UILabel?

    Как работать с ударными символами в iOS SQLite?

    Как определить, какой textField запускал textFieldDidEndEditing для динамически созданного UITableCell, содержащего 2 uiTextFields

    Проверка, если `if let` равен нулю

    NSUrlConnectionDelegate – Получение кодов статуса HTTP

    Использование программного обеспечения View Controller из раскадровки программно в контроллере просмотра страницы

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