我想在iOS Swift中摇动谷歌地图标记

我正在开发一个项目,我想在谷歌地图上摇动标记。 我正在使用自定义标记图标在地图上表示。 就像一个人的头在颤抖。 我不知道怎么做,搜索了很多,但没有找到任何解决方案。

你可以添加一个CAKeyframeAnimationCABasicAnimation到你的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.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 }