我可以从GMSMarker积分中获得UIScreen积分吗



我已经在我的项目中包含了谷歌地图视图,并成功地在上面显示了标记。谷歌地图只提供标记的弹出动画。我想要为标记放置动画。

我已经成功地实现了半径动画放大和缩小,但需要标记放置动画。

所以我的想法是,如果我把标记的确切点放进UIScreen,然后我会把别针从屏幕顶部掉下来,这会产生掉落动画的效果。

最后我从下面的代码中得到了drop动画,但有一个问题,我没有从mapview中得到完美的点来显示drop动画。

//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()
}
}

请帮帮我。任何帮助都将不胜感激。

我在您的代码中看到两个问题:

  1. 将CGPoint从mapView转换为keyWindow的坐标系。但是,您使用为窗口计算的CGPoint将imageView添加到视图中。

  2. 您没有考虑imageViews的大小。我想你的标记图像应该水平居中放置在地图上的点上方。(但这取决于标记图像的设计(


以下更改应该可以解决您的问题:

  • 将GMS标记原点转换为imageView的parentView的坐标系。更换

    let viewPoints = UIApplication.shared.keyWindow!.convert(point, from: mapView)

    带有

    let viewPoints = self.view.convert(point, from: mapView)

  • 考虑imageViews的大小。imageView的原点(动画之后的(应该是(xPosition-imageView.width/2,yPosition-imageView.height(。在您的示例中,替换

    let imageView = UIImageView(frame: CGRect(x: xPosition, y: yPosition - 100, width: 44, height: 44))

    带有

    let imageView = UIImageView(frame: CGRect(x: xPosition - 22, y: yPosition - 44 - 100, width: 44, height: 44))


如果这不能解决您的问题,请帮助我们提供一张显示错位图像的屏幕截图Views来帮助您。

我已经测试了您的代码,您的问题是将origin.y用于imageView框架。

指定矩形原点坐标的点。

根据Apple文档,origin在某种程度上代表CGRect的minX和minY。所以,你应该重构你的位置:

imageView.frame.origin.y = yPosition - imageView.bounds.height

相关内容

  • 没有找到相关文章

最新更新