使用 UItableviewCell 实现 Google 地图

Implementing a Google Map with UItableviewCell

我正在尝试在 UItableviewCell 组件中实现 google 映射。我这样做的方法是在原型单元格中定义一个 GMSMapView,然后使用我正在配置地图单元格的 dequeueReusableCell 方法。但是,我尝试应用的任何更改都失败了(例如添加标记、相机、缩放等)。有人有关于这个问题的任何信息吗?

代码参考:

class UITenderInfoMapCell: UITableViewCell {

@IBOutlet weak var view: UIView!
@IBOutlet weak var subView: GMSMapView!

override func awakeFromNib() {

    super.awakeFromNib()
    self.initMap()

}



/**
    Init blank map when initializing a MapCell, waypoints, directions, etc can be loaded later.
**/
func initMap() {

    let camera = GMSCameraPosition.camera(withLatitude: 1.285, longitude: 103.848, zoom: 12)
    let mapView = GMSMapView.map(withFrame: .zero, camera: camera)
    self.subView = mapView


}

我像你一样为 GMSMapView 添加了一个出口,仅此而已。我跳过了你的 initMap() 方法。

ViewController cellForRowAt 中对我来说效果很好。

let marker = GMSMarker(position: CLLocationCoordinate2D(latitude: 51.483682, longitude: -0.091991))
marker.map = cell?.subView

您的问题到底是什么?

按照以下步骤将 MapView 添加到 TableViewCell

  1. 在您的自定义 Tableviewcell 中获取一个 UIView,并将 class 名称命名为 "GMSmapView" 给该 UIView
  2. 确保连接 Mapview 的委托方法。
  3. 在您的 ViewController 中导入 "GoogleMaps" 以及委托 "GMSMapViewDelegate"。
  4. 像这样为您创建的 TableViewCell 创建 MapView 出口:
import UIKit

import GoogleMaps

class MapviewTableViewCell: UITableViewCell {


@IBOutlet weak var mapviewObj: GMSMapView!

override func awakeFromNib() {
    super.awakeFromNib()
    // Initialization code
}

override func setSelected(_ selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)

    // Configure the view for the selected state
}

}
  1. 在"cellForRowAt"

    中添加以下代码
            let cell = tableviewObj.dequeueReusableCell(withIdentifier: "cell") as! MapviewTableViewCell
    
            let marker = GMSMarker()
    
            let lat = Double("13.063754")
            let long = Double("80.24358699999993")
            marker.position = CLLocationCoordinate2DMake(lat!,long!)
    
            ///View for Marker
            let DynamicView = UIView(frame: CGRect(x:0, y:0, width:50, height:50))
            DynamicView.backgroundColor = UIColor.clear
    
            //Pin image view for Custom Marker
            let imageView = UIImageView()
            imageView.frame  = CGRect(x:0, y:0, width:50, height:35)
            imageView.image = UIImage(named:"LocationPin")
    
            //Adding pin image to view for Custom Marker
            DynamicView.addSubview(imageView)
    
            UIGraphicsBeginImageContextWithOptions(DynamicView.frame.size, false, UIScreen.main.scale)
            DynamicView.layer.render(in: UIGraphicsGetCurrentContext()!)
            let imageConverted: UIImage = UIGraphicsGetImageFromCurrentImageContext()!
            UIGraphicsEndImageContext()
    
            marker.icon = imageConverted
            marker.map = cell.mapviewObj
    
            cell.mapviewObj.camera = GMSCameraPosition.camera(withTarget: marker.position, zoom: 11)
    
            return cell
    

注意:这里我给了一些额外的代码来使用 "DynamicView" 添加您的自定义标记。如果您没有t want to add custom marker, you can skip those code. Also Don忘记为来自 google 开发者帐户的 google 地图配置要求设置,并向您的 appdelegate 添加相应的密钥,例如

let key = "keep you key here"
GMSServices.provideAPIKey(key)