首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我可以从GMSMarker points获得UIScreen points吗?

我可以从GMSMarker points获得UIScreen points吗?
EN

Stack Overflow用户
提问于 2018-11-13 18:41:01
回答 2查看 437关注 0票数 1

我已经在我的项目中包括谷歌地图视图,并成功地显示了它的标记。谷歌地图只提供流行动画的标记。我想要标记的下落动画。

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

所以我的想法是,如果我得到准确的点标记到UIScreen中,然后我将从我的屏幕顶部下降大头针,这将产生下降动画效果。

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

代码语言:javascript
复制
//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()
        }
    }

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

EN

回答 2

Stack Overflow用户

发布于 2018-11-22 16:54:01

我在你的代码中发现了两个问题:

  1. 将CGPoint从mapView转换为keyWindow的坐标系。但随后您使用为窗口计算的CGPoint将imageView添加到视图中。
  2. 您没有将imageViews大小考虑在内。我想您的标记图像应该水平居中放置在地图上的点的上方。(但这取决于您的标记图像的设计)

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

  • 将GMSMarkers原点转换为parentView的imageView坐标系。替换

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))

如果这还不能解决您的问题,请帮助我们提供一个屏幕截图来显示放错位置的imageViews。

票数 0
EN

Stack Overflow用户

发布于 2018-11-23 10:19:04

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

指定矩形原点坐标的点。

根据苹果公司的文件,origin在某种程度上代表了你的CGRect的minX和minY。所以,你应该这样重构你的位置:

代码语言:javascript
复制
imageView.frame.origin.y = yPosition - imageView.bounds.height
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53279195

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档