Анимация пульсирующего маркера в Google Maps Swift

Я использую GMaps SDK для Swift, и моя цель — заменить стандартный маркер анимированным типом, например пульсирующим эффектом. Я пытался играть со слоем, но не повезло. Любые предложения, как я могу добавить анимационные эффекты к моему маркерному изображению?

let parkingSpotsPosition = CLLocationCoordinate2D(latitude: self.SpotLocationLatitudes.last!, longitude: self.SpotLocationLongitudes.last!)
                    let marker = GMSMarker(position: parkingSpotsPosition)
                    marker.title = self.SpotNames.last
                    //marker.icon = GMSMarker.markerImageWithColor(UIColor.greenColor())
                     marker.icon = UIImage(named: "parking-location")
                     marker.map = self.gMapsView

person Yaroslav Dukal    schedule 24.05.2016    source источник
comment
возможный дубликат stackoverflow.com/questions/18529248/   -  person Android Enthusiast    schedule 24.05.2016
comment
верно, но проблема осталась   -  person Yaroslav Dukal    schedule 24.05.2016


Ответы (1)


Вы можете сделать это, нарисовав изображение в его состояниях. Например, пульсирующее изображение тревоги я рисую с одной освещенной линией, двумя освещенными линиями и т. д. Затем вы анимируете эти изображения.

Определите анимированное изображение, отдельные изображения и массив изображений следующим образом:

var animatedImage: UIImage!
var image1: UIImage!
var image2: UIImage!
var image3: UIImage!
var image4: UIImage!
var images: [UIImage]!

Где-нибудь вроде viewDidLoad установите продолжительность по вашему выбору. Я использую приложение Sketch для рисования отдельных изображений.

image1 = UIImage(named: "MarkerTrouble1.png")
image2 = UIImage(named: "MarkerTrouble2.png")
image3 = UIImage(named: "MarkerTrouble3.png")
image4 = UIImage(named: "MarkerTrouble4.png")

images = [image1, image2, image3, image4]

animatedImage = UIImage.animatedImage(with: images, duration: 0.8)

Если вы хотите нарисовать анимированное изображение на карте и увидеть пульсирующий эффект, то используйте обычный код GMSMapView и GMSMarker, что-то вроде:

let marker = GMSMarker()
let markerView = UIImageView(image: animatedImage)
marker.position = CLLocationCoordinate2D(latitude: userLat, longitude: userLng)
marker.iconView = markerView
marker.map = mapView
person Lawrence MacFadyen    schedule 30.11.2017
comment
Спасибо за ответ, это сработало. Для кого marker.tracksViewChanges = false нужно изменить на true. - person Tiago Mendes; 08.03.2019