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

Я создал пользовательский оверлей, который содержит геометрическую форму для приложения 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) 
  • iOS 6 - Пейзажные вращения контроллера навигации для некоторых видов, пока другие только портрет
  • почему invalidateLayout не запускает sizeForItemAtIndexPath в UICollectionView? (код прилагается)
  • изменение подзонов при вращении на ios
  • Принудительная автоматизация Маска для применения к UIView
  • CIIImage утечки, когда я пытаюсь выполнить поворот за пределами экрана до 100 изображений
  • Как масштабировать и поворачивать представление в одной анимации
  • Проблема ротации IOS6
  • Как повернуть UIButton в Swift?
  • Как принять во внимание поворот экрана при проектировании 3D-сцены?
  • вращение объекта неверно - приложение для iPhone
  • Почему viewWillTransitionToSize имеет неправильный размер?
  • PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.