用UItableviewCell实现一个Google Map
我正在试图在UItableviewCell组件内实现一个谷歌地图。 我这样做的方法是在原型单元格中定义GMSMapView,然后使用dequeueReusableCell方法configuration地图单元格。 但是,我尝试应用的任何更改都失败(如添加标记,相机,缩放等)。 有没有人有关于这个问题的任何信息?
代码参考:
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”。
- 像这样为你创build的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
t want to add custom marker, you can skip those code. Also Don
不要忘记configuration谷歌地图从谷歌开发者帐户的要求设置,并添加各自的关键,例如你的appdelegate
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
你的问题到底是什么?