Как правильно повернуть оверлей на карте? - PullRequest
3 голосов
/ 13 мая 2011

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

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

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

Спасибо.

Ответы [ 2 ]

1 голос
/ 09 июня 2017

Вот мое решение, работающее на 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)
0 голосов
/ 30 марта 2012

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

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

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

Подробнее см. Apple Docs .

...