Я хочу потрясти маркер google map в iOS Swift
Я работаю над проектом, в котором хочу потрясти маркер на карте google. Я использую пользовательский значок маркера для представления на карте. Как будто голова человека трясется. Я не знаю, как это сделать, и много искал, но не нашел никакого решения.
2 ответа:
Вы можете добавить
CAKeyframeAnimation
илиCABasicAnimation
к вашемуmarker.iconView!.layer
мы добавляем UIView с кадром больше, чем наш UIImageView внутри, тогда нам нужно настроить точку привязки вашего UIImageView снизу по вертикали и горизонтали по центру это будет точка, которая будет работать как ось в нашей анимации, наша анимация будет анимацией вращения в плоскости Z от -30 до 30 градусов для достижения желаемой анимации.Это самый простой способ сделать это, но вы также можете определить пользовательский класс и сделать много других вещиlet marker = GMSMarker(position: CLLocationCoordinate2D(latitude: 22.404963, longitude: -79.961755)) //we need a bigger UIView to avoid the clip problem with the UIImageView marker.iconView = UIView(frame: CGRect(x: 0, y: 0, width: 60, height: 40)) let imageView = UIImageView(frame: CGRect(x: (marker.iconView?.frame.width)!/2 - 14, y: (marker.iconView?.frame.height)! - 36, width: 28, height: 36)) imageView.contentMode = .scaleAspectFit imageView.image = UIImage(named: "iconomapa") marker.iconView?.addSubview(imageView) imageView.layer.anchorPoint = CGPoint(x: 0.5, y: 1.0) //we need adjust anchor point to achieve the desired behavior imageView.layer.frame = CGRect(x: (marker.iconView?.frame.width)!/2 - 14, y: (marker.iconView?.frame.height)! - 36, width: 28, height: 36) //we need adjust the layer frame let animation = CAKeyframeAnimation() animation.keyPath = "transform.rotation.z" animation.values = [ 0, -30 * .pi / 180.0, 30 * .pi / 180.0 , 0] animation.keyTimes = [0, 0.33 , 0.66 , 1] animation.duration = 1; animation.isAdditive = false; animation.isRemovedOnCompletion = true animation.repeatCount = .infinity marker.iconView!.subviews[0].layer.add(animation, forKey: "shakeAnimation") marker.map = self.mapView
Вот как это выглядит
Надеюсь, это поможет
Вы можете использовать свойство marker для поворота маркера,
marker.rotation = (you_angle_in_degree) * M_PI / 180.0f; // convert degree to radian
Анимациягоризонтальное встряхивание Вы можете получить через некоторый интервал времени изменение степени вращения, вы можете использовать таймер,
// create a timer timer = Timer.scheduledTimer(timeInterval: 0.5, target: self, selector: #selector(timerAction), userInfo: nil, repeats: true) func timerAction() { // Place you aniamtion logic here , // every 0.5 second change the rotation of your maker }