如何在Google Maps ios中修复中心的marker和GMSCircle?

如何在Google Maps ios中修复中心的marker和GMSCircle?,ios,swift,google-maps,Ios,Swift,Google Maps,我想用swift将标记和它的圆圈固定在地图的中心,而不考虑位置坐标。如果用户在地图上移动相机,我希望它保持显示在中心,而不在半径上闪烁,或者标记和用户应该能够增加和减少圆的半径。 我使用了circle.position=mapView.camera.target,但没有任何帮助。 所以我想知道我该怎么做? 请提供帮助。您的ViewController类需要实现函数映射视图(映射视图:GMSMapView!,didChangeCameraPosition:gmsmameraposition!)中的

我想用swift将标记和它的圆圈固定在地图的中心,而不考虑位置坐标。如果用户在地图上移动相机,我希望它保持显示在中心,而不在半径上闪烁,或者标记和用户应该能够增加和减少圆的半径。 我使用了circle.position=mapView.camera.target,但没有任何帮助。 所以我想知道我该怎么做?
请提供帮助。

您的
ViewController
类需要实现
函数映射视图(映射视图:GMSMapView!,didChangeCameraPosition:gmsmameraposition!)
中的
方法

func映射视图(映射视图:GMSMapView!,didChangeCameraPosition:GMSCameraPosition!)
方法中,可以更新圆的位置。该方法在地图上的任何动画或手势期间重复调用(或一次,如果相机已明确设置)

示例代码:

class ViewController: UIViewController, GMSMapViewDelegate {

    var mapView: GMSMapView!
    var cirlce: GMSCircle!

    override func viewDidLoad() {
        super.viewDidLoad()
        let camera = GMSCameraPosition.cameraWithLatitude(-33.86,
            longitude: 151.20, zoom: 6)
        mapView = GMSMapView.mapWithFrame(CGRectZero, camera: camera)
        mapView.myLocationEnabled = true
        self.view = mapView

        mapView.delegate = self

        cirlce = GMSCircle(position: camera.target, radius: 100000)
        cirlce.fillColor = UIColor.redColor().colorWithAlphaComponent(0.5)
        cirlce.map = mapView
    }

    func mapView(mapView: GMSMapView!, didChangeCameraPosition position: GMSCameraPosition!) {
        print("\(position.target.latitude) \(position.target.longitude)")
        cirlce.position = position.target
    }

}
class ViewController: UIViewController {

    var mapView: GMSMapView!

    override func viewDidLoad() {
        super.viewDidLoad()
        let camera = GMSCameraPosition.cameraWithLatitude(-33.86,
            longitude: 151.20, zoom: 6)
        mapView = GMSMapView.mapWithFrame(CGRectZero, camera: camera)
        mapView.myLocationEnabled = true
        self.view = mapView

        let circleView = UIView()
        circleView.backgroundColor = UIColor.redColor().colorWithAlphaComponent(0.5)
        view.addSubview(circleView)
        view.bringSubviewToFront(circleView)
        circleView.translatesAutoresizingMaskIntoConstraints = false

        let heightConstraint = NSLayoutConstraint(item: circleView, attribute: .Height, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1, constant: 100)
        let widthConstraint = NSLayoutConstraint(item: circleView, attribute: .Width, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1, constant: 100)
        let centerXConstraint = NSLayoutConstraint(item: circleView, attribute: .CenterX, relatedBy: .Equal, toItem: view, attribute: .CenterX, multiplier: 1, constant: 0)
        let centerYConstraint = NSLayoutConstraint(item: circleView, attribute: .CenterY, relatedBy: .Equal, toItem: view, attribute: .CenterY, multiplier: 1, constant: 0)
        NSLayoutConstraint.activateConstraints([heightConstraint, widthConstraint, centerXConstraint, centerYConstraint])

        view.updateConstraints()
        UIView.animateWithDuration(1.0, animations: {
            self.view.layoutIfNeeded()
            circleView.layer.cornerRadius = CGRectGetWidth(circleView.frame)/2
            circleView.clipsToBounds = true
        })
    }
}

编辑:

如果要使圆与mapView摄影机的移动无关,可以在mapView的顶部创建圆形UIView

示例代码:

class ViewController: UIViewController, GMSMapViewDelegate {

    var mapView: GMSMapView!
    var cirlce: GMSCircle!

    override func viewDidLoad() {
        super.viewDidLoad()
        let camera = GMSCameraPosition.cameraWithLatitude(-33.86,
            longitude: 151.20, zoom: 6)
        mapView = GMSMapView.mapWithFrame(CGRectZero, camera: camera)
        mapView.myLocationEnabled = true
        self.view = mapView

        mapView.delegate = self

        cirlce = GMSCircle(position: camera.target, radius: 100000)
        cirlce.fillColor = UIColor.redColor().colorWithAlphaComponent(0.5)
        cirlce.map = mapView
    }

    func mapView(mapView: GMSMapView!, didChangeCameraPosition position: GMSCameraPosition!) {
        print("\(position.target.latitude) \(position.target.longitude)")
        cirlce.position = position.target
    }

}
class ViewController: UIViewController {

    var mapView: GMSMapView!

    override func viewDidLoad() {
        super.viewDidLoad()
        let camera = GMSCameraPosition.cameraWithLatitude(-33.86,
            longitude: 151.20, zoom: 6)
        mapView = GMSMapView.mapWithFrame(CGRectZero, camera: camera)
        mapView.myLocationEnabled = true
        self.view = mapView

        let circleView = UIView()
        circleView.backgroundColor = UIColor.redColor().colorWithAlphaComponent(0.5)
        view.addSubview(circleView)
        view.bringSubviewToFront(circleView)
        circleView.translatesAutoresizingMaskIntoConstraints = false

        let heightConstraint = NSLayoutConstraint(item: circleView, attribute: .Height, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1, constant: 100)
        let widthConstraint = NSLayoutConstraint(item: circleView, attribute: .Width, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1, constant: 100)
        let centerXConstraint = NSLayoutConstraint(item: circleView, attribute: .CenterX, relatedBy: .Equal, toItem: view, attribute: .CenterX, multiplier: 1, constant: 0)
        let centerYConstraint = NSLayoutConstraint(item: circleView, attribute: .CenterY, relatedBy: .Equal, toItem: view, attribute: .CenterY, multiplier: 1, constant: 0)
        NSLayoutConstraint.activateConstraints([heightConstraint, widthConstraint, centerXConstraint, centerYConstraint])

        view.updateConstraints()
        UIView.animateWithDuration(1.0, animations: {
            self.view.layoutIfNeeded()
            circleView.layer.cornerRadius = CGRectGetWidth(circleView.frame)/2
            circleView.clipsToBounds = true
        })
    }
}

这是Swift 3的更新版本
嗯,我试过你的代码,但是圆圈随着摄像机也在不停地移动,这不是我想做的。我想让圆在中心保持静止,它不应该移动。它应该只是停留在中心,而不显示任何运动的过渡,无论发生什么@ztan@ztan当地图移动时,如何获取圆中心的坐标?@Rao您可以使用
CLLocationCoordinate2D坐标=[mapView.projection coordinateForPoint:somePoint]