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

#ios #rotation #mapkit #overlay

#iOS #поворот #mapkit #наложение

Вопрос:

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

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

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

Спасибо.

Ответ №1:

Вот мое решение, запускаемое на swift 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)
  

Ответ №2:

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

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

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

Более подробную информацию смотрите в документах Apple.

Комментарии:

1. Как вы поворачиваете его впоследствии? И ваша ссылка на документы Apple не существует.