【问题标题】:MapView Camera not changing in iOS SwiftMapView 相机在 iOS Swift 中没有改变
【发布时间】:2018-03-29 16:52:22
【问题描述】:

感谢您对我的问题的帮助,我正在创建一个名为 mapView 的视图,并将其类更改为 GMSMapView。 但是当我将地图分配给这个mapView时,布局非常好,但相机默认设置为欧洲,这并没有改变。

以下是代码:

 @IBOutlet weak var mapView: GMSMapView!
var latitudes = [19.199782,19.19855,19.199179]
var longitudes = [72.8734634,72.872935, 72.874535]
var titles = ["Riviera","Alica","Senate"]
var subTitle = ["1","2","3"]
override func viewDidLoad() {
    super.viewDidLoad()

    let camera = GMSCameraPosition.camera(withLatitude: 19.20060, longitude: 72.8734462, zoom: 15.0)
    let mapView1 = GMSMapView.map(withFrame: CGRect.zero, camera: camera)


    let path = GMSMutablePath()


    for i in 0...2
    {
        let marker = GMSMarker()
        marker.position = CLLocationCoordinate2D(latitude: latitudes[i], longitude: longitudes[i])
        marker.title = titles[i]

        marker.snippet = subTitle[i]
        marker.map = mapView1
        path.add(CLLocationCoordinate2D(latitude: latitudes[i], longitude: longitudes[i]))
    }

    let polyLine = GMSPolyline(path: path)

    polyLine.map = mapView1


    mapView = mapView1
    mapView.camera = camera

}

代码的输出是: Output

当我添加地图以查看时,我得到了所需的地图

对以上代码的修改: 而不是 mapView = mapView1 放 视图 = mapView1

所需输出:Desired Output

所以请帮助我在我的屏幕的 mapView 视图中获得所需的输出。 谢谢!

【问题讨论】:

  • 为什么要创建新变量mapView1?您可以直接将属性分配给您的 mapView。
  • DionizB ,我试过你的方法,但它不起作用

标签: ios xcode swift3 subview gmsmapview


【解决方案1】:

GMSMapView 类有如下功能:

animate(to:GMSCameraPosition)

所以在您的代码中,不要在地图视图上设置相机属性,而是这样做:

mapView.animate(to: camera)

希望这会有所帮助!

编辑

在仔细研究此代码后,我认为您的 mapView1 是不必要的,并导致您的插座出现问题。试试这样的:

override func viewDidLoad() {
    super.viewDidLoad()

    let camera = GMSCameraPosition.camera(withLatitude: 19.20060, longitude: 72.8734462, zoom: 15.0)
    let path = GMSMutablePath()

    for i in 0...2
    {
        let marker = GMSMarker()
        marker.position = CLLocationCoordinate2D(latitude: latitudes[i], longitude: longitudes[i])
        marker.title = titles[i]

        marker.snippet = subTitle[i]
        marker.map = mapView
        path.add(CLLocationCoordinate2D(latitude: latitudes[i], longitude: longitudes[i]))
    }

    let polyLine = GMSPolyline(path: path)
    polyLine.strokeWidth = 2.0
    polyLine.strokeColor = .black
    polyLine.map = mapView

    mapView.animate(to: camera)
}

在旁注中,我还建议将您的四个数组替换为一个字典对象数组,每个字典对象包含一个标题、副标题、纬度和经度,或类似的东西。然后更改您的 for 循环以适应

【讨论】:

  • @NewCoder 编辑了我的原帖
【解决方案2】:

我会建议视图的类型设置为UIView的,因为你编程,然后创建mapView1初始化mapView1后 P>

let mapView1 = GMSMapView.map(withFrame: CGRect.zero, camera: camera)

将其作为addSubview(mapView1) 添加到视图中。

希望对您有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-17
    • 2015-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多