自定义标记在放大地图时消失,并在使用聚类缩小地图时出现

2024-04-06

我已经通过集群在 GoogleMap 中加载了多个图钉,下面是我的代码。

Link : https://github.com/googlemaps/google-maps-ios-utils/issues/235 https://github.com/googlemaps/google-maps-ios-utils/issues/235

func initializeClusterItems() {
    let iconGenerator = GMUDefaultClusterIconGenerator()
    let algorithm = GMUNonHierarchicalDistanceBasedAlgorithm()
    let renderer = GMUDefaultClusterRenderer(mapView: mapView, clusterIconGenerator: iconGenerator)
    renderer.delegate = self
    clusterManager = GMUClusterManager(map: mapView, algorithm: algorithm, renderer: renderer)
}

func renderer(_ renderer: GMUClusterRenderer, willRenderMarker marker: GMSMarker) {
    marker.groundAnchor = CGPoint(x: 0.1, y: 0.45)
    if let markerData = (marker.userData as? POIItem) {
        let infoWindow = Bundle.main.loadNibNamed("InitialMapInfoView", owner: self, options: nil)?.first as! InitialMapInfoView
        infoWindow.imgUser.sd_setImage(with: URL(string: markerData.friend.user_details.user_photo_small), placeholderImage: #imageLiteral(resourceName: "User_profile"), options: .highPriority, completed: nil)

        if let objCurrentMarker = SharedData.sharedInstance.allFriends.first(where: {$0.user_details.user_id == markerData.friend.user_details.user_id}) {
            print("Latitude: \(markerData.position.latitude)")
            print("Longitude: \(markerData.position.longitude)")

            print(objCurrentMarker.user_details.screen_name)

            print("Update Latitude: \(objCurrentMarker.user_details.latitude)")
            print("Update Longitude: \(objCurrentMarker.user_details.longitude)")

            markerData.position = CLLocationCoordinate2D.init(latitude: objCurrentMarker.user_details.latitude, longitude: objCurrentMarker.user_details.longitude)
            markerData.friend.user_details.isUserOnline = objCurrentMarker.user_details.isUserOnline
        }

        if !markerData.friend.user_details.isUserOnline {
            infoWindow.imgCar.image = UIImage.init(named: "small_inactive_" + markerData.friend.user_details.car_personality_name)
        }
        else {
            infoWindow.imgCar.image = UIImage.init(named: "small_" + markerData.friend.user_details.car_personality_name)
        }

        infoWindow.lblName.text = markerData.friend.user_details.name
        infoWindow.btnImgVW.tag = markerData.userIndex
        infoWindow.btnImgVW.addTarget(self, action: #selector(btnUserTapped(_:)), for: .touchUpInside)
        marker.accessibilityHint = String(markerData.userIndex)
        marker.iconView = infoWindow
        marker.tracksViewChanges = false
    }
}

func setMarkers() {
    arrMarkers.removeAll()
    for i in 0..<SharedData.sharedInstance.allFriends.count {
        let marker = MyMarker()
        let friend = SharedData.sharedInstance.allFriends[i]
        marker.id = friend.user_details.user_id
        marker.position = CLLocationCoordinate2D.init(latitude: friend.user_details.latitude , longitude: friend.user_details.longitude)
        marker.accessibilityHint = String(i)

        marker.icon = #imageLiteral(resourceName: "trans")
        marker.tracksViewChanges = true
        marker.map = mapView

        arrMarkers.append(marker)
        self.generatePOIItems(String(format: "%d", i), position: marker.position, icon: nil, friend: friend, userIndex: i)
    }
    clusterManager.cluster()
    clusterManager.setDelegate(self, mapDelegate: self)
}

func updateMarkers() {
    clusterManager.cluster()
}

func generatePOIItems(_ accessibilityLabel: String, position: CLLocationCoordinate2D, icon: UIImage?, friend: WallBeeppClass, userIndex: Int) {
    let name = "Item \(accessibilityLabel)"
    let item = POIItem(position: CLLocationCoordinate2DMake(position.latitude, position.longitude), name: name, friend: friend, userIndex: userIndex)
    clusterManager.add(item)
}

class POIItem: NSObject, GMUClusterItem {
    var position: CLLocationCoordinate2D
    var name: String!
    var friend: WallBeeppClass!
    var userIndex: Int!

    init(position: CLLocationCoordinate2D, name: String, friend: WallBeeppClass, userIndex: Int) {
        self.position = position
        self.name = name
        self.friend = friend
        self.userIndex = userIndex
    }
}

我想更新 clusterManagerItems 内的用户纬度和经度。

我尝试使用下面的行来更改内部位置数据func renderer(_ renderer: GMUClusterRenderer, willRenderMarker marker: GMSMarker){}但应用程序因此错误而崩溃

“所有项目都应该映射到一个距离”

markerData.position = CLLocationCoordinate2D.init(latitude: objCurrentMarker.user_details.latitude, longitude: objCurrentMarker.user_details.longitude)

如果我添加下面的行,那么它就可以工作,但是当我放大/缩小地图时。 clusterManager 项目在旧位置加载,然后加载到新位置。

marker.position = CLLocationCoordinate2D.init(latitude: objCurrentMarker.user_details.latitude, longitude: objCurrentMarker.user_details.longitude)

你可以看到,我打印了markerData.friend.user_details.latitude包含用户所有坐标的详细信息,我还打印了用户的最新数据objCurrentMarker.user_details.latitude其中包含最新的坐标。

EDIT1

我可以更新已经添加的GMUClusterItem但问题是当我打电话时clusterManager.cluster()当我从服务器收到新数据时再次GMUClusterItem当我放大地图时消失,当缩小地图时又出现在地图上。

EDIT 2

参考视频链接

https://gofile.io/?c=8z0vE5 https://gofile.io/?c=8z0vE5

EDIT 3

由于以下代码,自定义标记消失了。当我在下面的代码中发表评论时,标记并没有从地图上消失。

CATransaction.begin()
CATransaction.setAnimationDuration(1.0)
marker.position = CLLocationCoordinate2D.init(latitude: objCurrentMarker.user_details.latitude, longitude: objCurrentMarker.user_details.longitude)
CATransaction.commit()

请指导我如何更新已添加的 Clustermanager 项目?

提前致谢


对我有用的一件事是在渲染器级别禁用动画,即 GMUClusterRenderer.animatesClusters = false

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

自定义标记在放大地图时消失,并在使用聚类缩小地图时出现 的相关文章

  • 如何在 Google 地图 InfoWindow 中使用 Jquery?

    我想在 Google 地图 InfoWindow 中显示 jQuery 效果 显示和隐藏 div 我该怎么做 尽管我个人还没有尝试过 但这 gt http code google com p jquery ui map http code
  • 仅在 iPhone X 上显示状态栏

    如果不是 iPhone X 则希望隐藏状态栏 如果是 iPhone X 则希望显示状态栏 这很可能必须以编程方式完成 因为 plist 中没有支持此功能的键 我发现的最接近的一个是UIStatusBarHidden 方法一 You have
  • 如何在 Swift Playgrounds 中获得弹出对话框

    我想知道如何在 Swift 中弹出一个对话框游乐场 是的 必须在 Playgrounds 中 我尝试了以下代码 直接来自 AppleDevs 站点 然而 无论我如何尝试 self tag always抛出错误 谁能帮我这个 import U
  • CustomNSError 协议有什么作用以及为什么我应该采用它?

    什么是CustomNSError协议的用途以及为什么我应该采用它 Apple提供的文档仅指出 描述错误类型 具体提供域 代码和 用户信息字典 我已经在谷歌上搜索过 但找不到与我的问题相关的任何内容 每种类型都符合Error协议是隐含地桥接的
  • 进入后台时 Alamofire 请求卡住?

    我正在使用 Alamofire 调用 Web 服务 该服务需要相当长的时间才能加载 如果应用程序进入后台 当我返回应用程序时 我会被加载程序卡住 我想这是因为调用永远不会向我的完成处理程序返回任何内容 我该如何解决这个问题 您可以使用后台抓
  • iOS WKWebView 处理文件下载

    我面临以下问题 在 Web 界面中 文件下载是通过锚标记触发的 如下所示 a href bla blabla a 虽然 Safari 浏览器可以处理此请求并打开一个对话框来处理文件 但 WKWebView 将此视为普通链接并且不对其执行任何
  • 是否可以更改枚举中的关联值?

    我正在使用 Swift 枚举 想知道是否有一种方法可以更改枚举的关联值 例如下面的代码尝试但失败了 enum myEnum case SomeCase Int mutating func someFunc switch self case
  • 二元运算符“/”不能应用于两个(Int)操作数[重复]

    这个问题在这里已经有答案了 我得到了Binary operator cannot be applied to two Int operands当我将以下代码放入 Xcode 中的 Swift Playground 时出错 func sumO
  • 在 Swift 中以编程方式为 iOS 制作带有名字首字母的图像,例如 Gmail

    我需要在 UITableView 中显示与其姓名相对应的每个用户的个人资料图片 在下载图像之前 我需要显示一张带有他名字的第一个字母的图像 就像在 GMail 应用程序中一样 如何在 Swift for iOS 中以编程方式执行此操作 不需
  • Google 地图 - 删除滑雪道?

    滑雪道可以拆除吗 我已经使用了该向导 但由于在制作向导后添加了滑雪道 因此我认为该向导没有更新以显示如何关闭滑雪道 我已经阅读了文档 也许这是一个疏忽 更新 滑雪道和缆车现在被归类为 POI https issuetracker googl
  • 如何在 google.maps.event.addListener 中使用它

    以下示例有效 但是当我尝试传递参数并使用this在该功能不起作用 Working google maps event addListener markers i click showInfoWindow function showInfoW
  • iOS Swift 和 reloadRowsAtIndexPaths 编译错误

    我与 xCode Swift 陷入僵局并刷新 UITableView 的单行 这条线有效 self tableView reloadData 而这条线没有 self tableView reloadRowsAtIndexPaths curr
  • 如何将额外的文本添加到颤振谷歌地图自定义标记中?

    问题是如何将自定义谷歌地图标记上的文本重叠与代表车辆登记号的文本融合在一起 我尝试使用此方法将文本叠加在图标上 生成器 上下文 gt 但根本不被认可 class MapsDemo extends StatefulWidget overrid
  • 如何观察UserDefaults的变化?

    我有一个 ObservedObject在我看来 struct HomeView View ObservedObject var station Station var body some View Text self station sta
  • 删除派生数据文件夹后,Xcode 不断重新创建派生数据文件夹

    自动完成功能在 Xcode 6 中不再起作用 我四处搜索 发现删除派生数据文件夹可以解决此问题 每次我删除它时 它都会回来 然后就不会再自动完成了 有什么建议么 Thanks 没关系 我解决了这个问题 我没有声明需要在类内的方法中使用的变量
  • UITableView 快速获取 titleForHeadersInSection

    我想在 UITableView 的部分中设置标题的标题 语法是什么swift设置该部分中标题的标题 func tableView tableView UITableView titleForHeaderInSection section I
  • 我们能否检测用户是否通过主页按钮或锁定按钮离开而没有监听 darwin 通知?

    我最近向应用程序商店提交了一个新的二进制文件并将其发送以供审核 但它立即被拒绝并显示以下消息 不支持的操作 不允许应用程序监听设备锁定通知 经过一番挖掘后 我发现我们无法使用 com apple springboard lockstate
  • 为 Swift 对象/属性设置观察者

    我一直在寻找一种在连接到 Mac 的显示器数量发生变化时触发方法的方法 我知道我可以获得 NSScreen screens count 的值 但我需要找到一种方法来在该值发生变化时创建通知或其他内容 或者指示所连接的显示器数量发生变化的其他
  • 可以获取位置,但无法获取航向

    我目前只使用模拟器 但我在 iOS 模拟器上快速使用 CoreLocation 时遇到问题 我得到此代码打印的位置更新 但从未得到标题 我不想当然 我正在尝试制作一个指南针类型的应用程序 它将显示目标的方位 class CompassVie
  • 设置/覆盖 UICollectionView 中单元格之间的填充

    我有一个 UICollectionView 但在获取单元格之间的填充时遇到了问题 理论上 我应该能够将屏幕除以 4 并且我可以获得包含 4 个图像的单元格大小 完美地占据屏幕宽度 但是 它选择不这样做 相反 它会创建 3 个具有巨大填充的图

随机推荐