使用 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
- 在您的自定义 Tableviewcell 中获取一个 UIView,并将 class 名称命名为 "GMSmapView" 给该 UIView
- 确保连接 Mapview 的委托方法。
- 在您的 ViewController 中导入 "GoogleMaps" 以及委托 "GMSMapViewDelegate"。
- 像这样为您创建的 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
}
}
在"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)
我正在尝试在 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
- 在您的自定义 Tableviewcell 中获取一个 UIView,并将 class 名称命名为 "GMSmapView" 给该 UIView
- 确保连接 Mapview 的委托方法。
- 在您的 ViewController 中导入 "GoogleMaps" 以及委托 "GMSMapViewDelegate"。
- 像这样为您创建的 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 } }
在"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)