MapView 相机在 iOS Swift 中没有改变

Posted

技术标签:

【中文标题】MapView 相机在 iOS Swift 中没有改变【英文标题】:MapView Camera not changing in 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 ,我试过你的方法,但它不起作用 【参考方案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) 添加到视图中。

希望对您有所帮助!

【讨论】:

以上是关于MapView 相机在 iOS Swift 中没有改变的主要内容,如果未能解决你的问题,请参考以下文章

使用googleMaps api在swift mapView中显示方向按钮

无法让 MapView 放大当前位置 - SWIFT

iOS 8 SDK、Swift、MapKit 绘制路线

如何仅在 Swift 中访问从相机拍摄的图像,就像 iOS 中的画廊一样?

iOS9中,swift判断相机,相册权限,选取图片为头像

iOS 应用程序在 swift 中关闭视图后冻结