这周想在地图页面中加入Cluster Item的功能,如果不知道这是什麽,请右转参考法兰克写的这篇文章
原本以为照着文章做一切都会很顺利,没想到光是在 import GoogleMapsUtils 的部分就卡了快半天!
以往改完Podfile文件後,再从终端机输入 pod install 和 pod update 便能导入套件,不知道为什麽偏偏在导入GoogleMapsUtils时一直报错。一度以为是版本不相容的问题,还将最低支援向上调到ios 13,但还是解决不了问题.........
後来实在没办法跑去询问了学长,才发现只要在Podfile中的target上方加入 use_frameworks! 这一行,就能顺利解决问题了,开始进行专案才发现许多恼人的bug真的都是经验不足才会踩坑呢。
以下是我实作Cluster Item的code,在初始化marker的部分是从server那取得资料,所以跟文章示范的不太依样
,想看原版的可以点上方连结。
var clusterManager : GMUClusterManager! //丛集管理器
override func viewDidLoad() {
super.viewDidLoad()
/ 生成 Cluster Manager 用来管理地图上的 Cluster Item
//提供应用程序逻辑,以提取要在不同缩放级别使用的群集图标。
let iconGenerator = GMUDefaultClusterIconGenerator()
//指定一种算法,该算法确定标记如何聚集,例如要包括在同一聚类中的标记之间的距离。
let algorithm = GMUNonHierarchicalDistanceBasedAlgorithm()
//提供用於处理地图上群集图标的实际呈现的应用程序逻辑。
let renderer = GMUDefaultClusterRenderer(mapView: self.mapView, clusterIconGenerator: iconGenerator)
renderer.delegate = self
self.clusterManager = GMUClusterManager(map: self.mapView, algorithm: algorithm, renderer: renderer)
//在GMUClusterManager实例上设置地图委托。
self.clusterManager.setDelegate(self, mapDelegate: self)
// 初始化地图上的 标记丛集
self.initMapViewMarker()
}
private func initMapViewMarker() {
ApiHelper.instance().getByArea(ping:50,range:2){
[weak self] (isSuccess) in
guard let weakSelf = self else { //如果此 weakself 赋值失败,就 return
return
}
if (isSuccess){
print("success")
weakSelf.markerDataList.getMarkerDatas()
.map{ MyMarker(markerData: $0) }
.forEach {
let item = ClusterItem(markerData: $0.markerData)
self?.clusterManager.add(item)
}
self?.clusterManager.cluster()
return
}else{
print("failed")
return
}
}
}
extension MapViewController: GMUClusterRendererDelegate {
/// 回传一标记,此 delegate 可用来控制标记的生命周期。例如:设定标记的座标、图片等等
/// - Parameter renderer: _
/// - Parameter object: _
func renderer(_ renderer: GMUClusterRenderer, markerFor object: Any) -> GMSMarker? {
switch object {
case let clusterItem as ClusterItem:
let myMarker = MyMarker(markerData: clusterItem.markerData)
myMarker.snippet = clusterItem.markerData.address
myMarker.icon = UIImage(named: "marker_rainbow")
return myMarker
default:
return nil
}
}
}
// MARK: - GMUClusterManagerDelegate
extension MapViewController: GMUClusterManagerDelegate {
/// 点击丛集所会触发的事件
/// - Parameter clusterManager: _
/// - Parameter cluster: _
func clusterManager(_ clusterManager: GMUClusterManager, didTap cluster: GMUCluster) -> Bool {
print("按了丛集")
return false
}
/// 点击丛集项目所会触发的事件
/// - Parameter clusterManager: _
/// - Parameter clusterItem: _
func clusterManager(_ clusterManager: GMUClusterManager, didTap clusterItem: GMUClusterItem) -> Bool {
print("按了丛集项目")
return false
}
}
<<: Day 24 - 天眼CNN 的耳朵和嘴巴 - BERT
>>: 重要性分析和业务影响分析(criticality analysis and Business impact analysis (BIA))
展开运算子及 其余运算子( 又称 其余参数 ) 他们有共通特点,那就是「 都跟阵列有关 」 写法...
URL : https://tryhackme.com/room/dogcat IP: 10.10...
风险评监首步曲:资讯资产盘点 标题没打错呦...建立资安制度前,请先确认自已的资安范围有多大。 实务...
在昨天我们谈完Azure小白如何使用Azure Container Instances执行Docke...
看完今天的文章,自己试着在专案写动态写法後,读者们会发现今天讲的东西很实用。我们可以透过动态的写法,...