用UItableviewCell实现谷歌地图
问题描述:
我想在UItableviewCell组件内部实现谷歌地图。我这样做的方式是在protoype单元格内定义一个GMSMapView,然后使用dequeueReusableCell方法配置地图单元格。但是,我尝试应用的任何更改都会失败(如添加标记,相机,缩放等)。有没有人有关于这个问题的任何信息?用UItableviewCell实现谷歌地图
码参考:
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类的委托方法。
- 在您的ViewController中导入“GoogleMaps”以及委托“GMSMapViewDelegate”。
- 让出路的MapView像这样为你创建TableViewCell:
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
代码
注意:这里我是gi通过使用“DynamicView”添加一些额外的代码来添加自定义标记。如果您不想t want to add custom marker, you can skip those code. Also Don
请忘记配置Google开发者帐户的Google地图所需的设置,并为您的应用添加相应的密钥。
let key = "keep you key here"
GMSServices.provideAPIKey(key)
答
我增加了一个出口为GMSMapView中像你一样,仅此而已。我跳过了你的initMap()
方法。
而在ViewController
cellForRowAt
它适用于我。
let marker = GMSMarker(position: CLLocationCoordinate2D(latitude: 51.483682, longitude: -0.091991))
marker.map = cell?.subView
究竟是什么问题?
一些代码将是有益的,我们并没有读心术.. –
任何改变我尝试申请失败?你是什么意思?您的应用崩溃或更改在用户界面中不可见吗? – Matt
@Matt变化在用户界面中不可见,我只是不断得到一张空白的地图。 – Dan