Наложение анимированных карт: как сделать так, чтобы MKCircle увеличивался с 0 до его полного размера, когда он добавлялся?

Я хотел бы, чтобы мой MKCircle расширялся с 0 до указанного размера радиуса всякий раз, когда он добавлялся на карту. MKOverlayRenderer дает мне хороший конечный результат, но он добавляет круг слишком спонтанно. Я хотел бы анимировать, чтобы вход был более плавным, но я не знаю, как это сделать без анимационных слоев.

Я попытался добавить расширяющийся UIView с CABasicAnimation и заменить его наложением по завершении, но код выглядит ужасно, и при добавлении наложения появляется заметное мерцание.

Я посмотрел на два других проекта, утверждающих, что они имеют анимированные оверлеи, но ни один из них не является той серебряной пулей, которую я ищу.

  • http://yickhong-ios.blogspot.com/2012/04/animated-circle-on-mkmapview.html Еще в 2012 году этот парень подклассифицировал MKCircleView, который, по-видимому, устарел / настоятельно не рекомендуется.
  • https://github.com/jhurray/iOS7AnimatedMapOverlay Этот парень подклассифицирует UIImageView, добавляет круг png и добавляет некоторые CABasicAnimations, чтобы он расширялся и исчезал. Затем он добавляет этот вид изображения на карту всякий раз, когда выбирается аннотация. Анимация работает нормально, но всякий раз, когда регион начинает меняться, анимация удаляется и добавляется снова, только когда регион завершает изменение. Это не функциональное наложение, которое перерисовывает изменения региона. Все, что у него есть, это MKCircle, установленный на ноль с комментарием, говорящим вам "измените его", если вы хотите наложение. Я мог бы, возможно, "изменить его", чтобы добавить наложение, когда UIImageView завершит расширение, но что-то подсказывает мне, что это даст тот же мерцающий результат, что и мой обходной путь UIView.

Есть еще один подход, который я считаю, в котором я не слишком уверен (потому что я никогда не пытался создавать анимационные эффекты только из Core Graphics), и это подклассы MKOverlayRenderer, установка пользовательского чертежа (из MKCircle?) в - (void)drawMapRect: на ширину и высоту х = 0, и используя NSTimer увеличить х и вызвать setNeedsDisplayInMapRect пока круг не достиг своего полного размера. Для меня это звучит как дальний план, и, возможно, есть более простой способ сделать это.

Мне нужен кто-то, чтобы указать мне правильное направление на этот.

0 ответов

Другие вопросы по тегам