2017-02-20 71 views
0

我想在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 


} 
+1

一些代码将是有益的,我们并没有读心术.. –

+0

任何改变我尝试申请失败?你是什​​么意思?您的应用崩溃或更改在用户界面中不可见吗? – Matt

+0

@Matt变化在用户界面中不可见,我只是不断得到一张空白的地图。 – Dan

回答

1

请按照以下步骤添加到MapView类TableViewCell

  1. 采取定制Tableviewcell一个的UIView,给类名为“GMSMapView中”到UIView的
  2. 务必连接MapView类的委托方法。
  3. 在您的ViewController中导入“GoogleMaps”以及委托“GMSMapViewDelegate”。
  4. 让出路的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) 
    
    0

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

    而在ViewControllercellForRowAt它适用于我。

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

    究竟是什么问题?