[Cmoney 菁英软体工程师战斗营] IOS APP 菜鸟开发笔记(6)----关于标记丛集(Cluster Item

前言

这週想在地图页面中加入Cluster Item的功能,如果不知道这是什么,请右转参考法兰克写的这篇文章

导入GoogleMapsUtils失败

原本以为照着文章做一切都会很顺利,没想到光是在 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: - GMUClusterManagerDelegateextension 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    }    }       

关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章