首页 > 解决方案 > 我可以从 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()
        }
    }

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

标签: iosswiftanimationgoogle-maps-markersgmsmapview

解决方案


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

指定矩形原点坐标的点。

根据 Apple 文档,origin 有点代表你的 CGRect 的 minX 和 minY。所以,你应该这样重构你的位置:

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

推荐阅读