ios - 我可以从 GMSMarker 积分中获得 UIScreen 积分吗?
问题描述
我在我的项目中包含了谷歌地图视图并成功地在其上显示了标记。谷歌地图只提供标记的弹出动画。我想要为标记放置动画。
我已经成功实现了半径动画放大和缩小,但需要标记放置动画。
所以我的想法是,如果我在 UIScreen 中获得准确的标记点,那么我将从屏幕顶部放置图钉,这将产生放置动画的效果。
最后我从下面的代码中得到了放置动画,但是有一个问题是我没有从 mapview 中得到完美的点来显示放置动画。
//Drop pin
func setMarker(latitude : Double, longitude : Double, isForJobLocation : Bool = false){
let point = mapView.projection.point(for: CLLocationCoordinate2D(latitude: latitude, longitude: longitude))
let viewPoints = UIApplication.shared.keyWindow!.convert(point, from: mapView)
print(viewPoints)
self.showAnimatation(xPosition: viewPoints.x, yPosition: viewPoints.y) {
let marker1 = GMSMarker(position: CLLocationCoordinate2D(latitude: latitude, longitude: longitude))
marker1.icon = UIImage(named: "mapLoadingPin")
marker1.map = self.mapView
}
}
func showAnimatation(xPosition : CGFloat, yPosition : CGFloat, completion : @escaping (() -> ())){
let imageView = UIImageView(frame: CGRect(x: xPosition, y: yPosition - 100, width: 44, height: 44))
imageView.image = UIImage(named: "mapLoadingPin")
self.view.addSubview(imageView)
UIView.animate(withDuration: 1.0, animations: {
imageView.frame.origin.y = yPosition
self.view.layoutIfNeeded()
}) { (true) in
imageView.removeFromSuperview()
completion()
}
}
请帮我。任何帮助,将不胜感激。
解决方案
我已经测试了你的代码,你的问题是使用origin.y
你的 imageView 框架。
指定矩形原点坐标的点。
根据 Apple 文档,origin 有点代表你的 CGRect 的 minX 和 minY。所以,你应该这样重构你的位置:
imageView.frame.origin.y = yPosition - imageView.bounds.height
推荐阅读
- javascript - 根据子组件中的变量状态在 NuxtJS 中设置标题
- machine-learning - 为什么easyocr在本地开发机器上占用更多内存而在google colab上占用更少?
- reactjs - 类型错误:无法将 undefined 或 null 转换为对象
- ssh - 如何使 tmux 窗格确定运行比 SSH 会话更深的命令
- html - css - 内容区域侧跨度的意外位置
- pyspark - 有没有办法从 pyspark MFlow 库向 BinaryClassificationEvaluator 添加自定义(几乎所有流行的)指标?
- android-studio - 如何使用带有 SerializedName 的变量
- svn - 不同用户组不同权限的SVN钩子
- angular - Angular 服务和会话存储之间的区别
- ssis - SSIS oracle NUMBER vs sql server映射