2017-02-20 72 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 
    

    究竟是什麼問題?