我正在尝试在 UItableviewCell 组件中实现谷歌地图。我这样做的方法是在原型(prototype)单元格中定义一个 GMSMapView,然后使用我正在配置 map 单元格的 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
}
最佳答案
执行以下步骤将 MapView 添加到 TableViewCell
- 在您的自定义 Tableviewcell 中获取一个 UIView,并将类名称命名为“GMSmapView”给该 UIView
- 确保连接 Mapview 的委托(delegate)方法。
- 在您的 ViewController 中导入“GoogleMaps”以及委托(delegate)“GMSMapViewDelegate”。
- 像这样为您创建的 TableViewCell 制作 MapView socket :
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 } }
在“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
不要忘记从谷歌开发者帐户配置谷歌地图所需的设置,并将相应的 key 添加到您的应用程序委托(delegate)中,例如
let key = "keep you key here"
GMSServices.provideAPIKey(key)
关于ios - 使用 UItableviewCell 实现 Google map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42338782/