ios - 使用 UItableviewCell 实现 Google map

标签 ios swift uitableview google-maps-sdk-ios

我正在尝试在 UItableviewCell 组件中实现谷歌地图。我这样做的方法是在原型(prototype)单元格中定义一个 GMSMapView,然后使用我正在配置 map 单元格的 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


}

最佳答案

执行以下步骤将 MapView 添加到 TableViewCell

  1. 在您的自定义 Tableviewcell 中获取一个 UIView,并将类名称命名为“GMSmapView”给该 UIView
  2. 确保连接 Mapview 的委托(delegate)方法。
  3. 在您的 ViewController 中导入“GoogleMaps”以及委托(delegate)“GMSMapViewDelegate”。
  4. 像这样为您创建的 TableViewCell 制作 MapView socket :
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
}

}
  1. 在“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不要忘记从谷歌开发者帐户配置谷歌地图所需的设置,并将相应的 key 添加到您的应用程序委托(delegate)中,例如

let key = "keep you key here"
GMSServices.provideAPIKey(key)

关于ios - 使用 UItableviewCell 实现 Google map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42338782/

相关文章:

ios - 配置 UICollectionViewFlowLayout 以从下到上布局行

ios - 将回调添加到预构建的异步函数 Swift iOS

ios - 用户使用 AFNetworking 登录

swift - 详细 View Controller 后退按钮标题不随主视图 Controller 标题更新

swift - TableView 单元格中的委托(delegate)错误

iphone - 某些 iphone sip 应用程序使用什么技巧与 UDP only sip 服务器通信?

objective-c - 如何将 NSDitonary 从 Swift 转换为 Objective-c?

swift - 从 NSImage 中切割大小的正方形并缩放以适合更小的正方形

ios - 在 UITableView 中自定义标题

iphone - 如何将 AdMob 广告添加到 UITableView