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

Я создал пользовательский оверлей, который содержит геометрическую форму для приложения 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) 
  • Настройки видового экрана, вызывающие проблемы с ротацией в Mobile Safari
  • viewWillTransitionToSize приводит к изменению размера и перемещению невращающегося контроллера
  • Перетаскивание + поворот с помощью UIPanGestureRecognizer.
  • Режимы вращения контроллера детского просмотра не называются
  • почему invalidateLayout не запускает sizeForItemAtIndexPath в UICollectionView? (код прилагается)
  • iOS CAKeyframeAnimation rotationMode в UIImageView
  • Вращение камеры в SceneKit
  • Как определить, когда авторезистентность изменяет границы представления
  • Scenekit - convertTransform поворотного под-subNode на основе мировых осей
  • Как принять во внимание поворот экрана при проектировании 3D-сцены?
  • UILabel уродливая анимация вращения с автозапуском
  • Почему viewWillTransitionToSize имеет неправильный размер?
  • Interesting Posts

    Расширенная строка состояния перемещает приложение вниз (iOS 8)

    Являются ли раскадровки, вынуждающие вас писать уродливый код?

    Как стилизовать ячейки UITableView, чтобы выглядеть как пузыри сообщений?

    Как играть в аудиофайл AMR?

    Идентификатор Bundle в сертификате не соответствует введенному идентификатору Bundle ID

    Как сделать UIKeyboard черным?

    Расширение приложения NSExtensionActivationRule & iOS: как активировать расширение в iTunes

    Как построить HealthKit HKUnit для ммоль / л (миллимолей на литр) для значений глюкозы в крови?

    Есть ли проблема с этим использованием kCAMediaTimingFunctionEaseIn?

    MPMoviePlayerController останавливается после 5 секунд – Swift

    Xamarin Нет установленных профилей подготовки к установленным идентификаторам подписи iOS

    Шрифт UITextView равен нулю

    Настройки AVAudioTimePitchAlgorithmVarispeed для AVFoundationAudioSettings

    Изменить стиль линии CPScatterPlot для разных точек

    Можно ли установить navigationitem.title из NIB вида?

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