作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在做一个项目,我想在这个项目中摇动谷歌地图上的标记。我正在使用自定义标记图标在 map 上表示。就像一个人的头在摇晃。我不知道该怎么做并搜索了很多但没有找到任何解决方案。
最佳答案
您可以将 CAKeyframeAnimation
或 CABasicAnimation
添加到您的 marker.iconView!.layer
我们添加一个 UIView,其框架比我们的 UIImageView 大在里面然后我们需要将你的 UIImageView 的 anchor 调整到底部垂直和水平居中这将是我们动画中的枢轴点,我们的动画将是 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
希望对你有帮助
关于ios - 我想在 iOS Swift 中摇动谷歌地图标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45137032/
leaflet:一个开源并且对移动端友好的交互式地图 JavaScript 库 中文文档: https://leafletjs.cn/reference.html 官网(英文): ht
我是一名优秀的程序员,十分优秀!