当标记数量或标记大小增加时,自定义标记不会在 React Native IOS 中完全呈现

问题描述 投票:0回答:2

我想做什么?

我正在尝试使用 react-native-maps 库在 Android 和 iOS 中呈现自定义标记,其中标记的数量可以在 16-900 之间。


我卡在哪里了?

当标记数量增加(>60)或标记大小增加时,某些标记在iOS中没有完全渲染。但是,如果用户单击该区域,标记将被渲染并且现在可见。

尽管这在 Android 中运行良好,所以我的假设是 iOS 存在一些渲染问题。


什么样的问题?


标记格式:

markers = {
  ["key": 0, "latitude": 34.123, "longitude": 134.123],
  ["key": 1, "latitude": 35.123, "longitude": 135.123],
  ["key": 2, "latitude": 36.123, "longitude": 136.123],
  [],
  []
}

示例代码:

注意:标记通过 API 获取并保存在状态中

import React from 'react';
import MapView, {PROVIDER_GOOGLE} from 'react-native-maps';

class CustomMap extends React.Component {
  constructor(props) {
    super(props);

    this.state = {
      markers: [],
      region: {
        latitude: 34.334653,
        longitude: 134.365288,
        latitudeDelta: 0.45,
        longitudeDelta: 0.45,
      },
    };
   }

   render() {
     const {
       region,
       markers,
     } = this.state;

     return (

      <View style={{flex:1}}>
        <MapView
          provider={PROVIDER_GOOGLE}
          style={styles.map}
          initialRegion={region}
          region={region}
          ref={ref => (this.map = ref)}>
          {markers &&
            markers.map((marker, index) => (
              <CustomMarker
                marker={marker}
                key={index}
              />
            ))}
          </MapView>
      </View>
    );
   }
  }
 }

下面是CustomMarker类

import React, {useState} from 'react';
import {Marker} from 'react-native-maps';

const CustomMarker = ({marker}) => {
  const [tracksViewChanges, setTracksViewChanges] = useState(true);

  return (
    <Marker
      key={marker.key}
      coordinate={marker}
    >
      <Image fadeDuration={0} source={getIcon(marker)} />;
    </Marker>
  );
};

const getIcon = marker => {
  switch (marker?.id) {
    case a:
      return require('Assets/Images/img1/a.png');
    case b:
      return require('Assets/Images/img2/b.png');
    case c:
      return require('Assets/Images/img3/c.png');
    default:
  }
};

我尝试了以下事情:-

  1. 尝试使用 react-native-maps 库的 Marker 组件的 icon 和 image 属性,但在标记数量从 700 增加后问题相同。
  2. 使用 svg 图像而不是来自 react-native 库的图像。
  3. 当使用默认标记时,标记在 ios 和 android 中正确呈现。
  4. 在 Marker Component 中使用 ref 将 TrackViewChange 设置为 false。 参考
android ios react-native google-maps react-native-maps
2个回答
0
投票

使用

.map()
函数将所有标记直接渲染到地图上可能不是显示标记的最佳方式。我很确定您的标记没有正确渲染以防止渲染/性能问题。

如果位置彼此靠近,则更好的解决方案可能是将多个标记“合并”在一起,具体取决于缩放级别。您可能已经看到其他应用程序在您缩小时将多个标记合并为一个,以防止数百个标记使您的视图混乱。

我搜索了一下,

react-native-maps
回购中已经发布了一个关于这个的问题。请参阅:Marker Clustering #2992

在评论中,链接了一个库以提供这种“合并”功能。它已经有一段时间没有真正更新了,但是在撰写本文时每周有 9.000 次下载,看来这个库仍然可以正常工作。我建议您尝试一下,看看您的问题是否仍然存在。

react-native-map-clustering

看了一下源码,看起来不是很复杂。因此,通过一些调整,您可以对其进行修补以满足您的确切需求。


0
投票

我确实相信,如果我们都能一起设置并澄清按钮,以设置按钮以安装在未来搬家和土地的实践中,并让街道像杰森一家一样隐形。事实也是找到信号或人对建筑物及其过去的分配,以明确时区。我没有按钮让钱花得值,建议人们在为时已晚之前玩自己的游戏。我想帮助提供赌场和酒店按摩床和房间的想法。我需要人名时间和重述标题的检查点。 Google adsense 仍然没有让钱显示出来,因为我没有在显示找到我的时间中被隐藏。我需要有关酒店和工作娱乐名片的帮助。请帮忙。 lvdutwcp@yahoo.com 和 leilanidvl2023@gmail.com

5 星痴呆让我迷路,我的互联网在接下来的页面中丢失。请给我一个方法,看看谁能帮我找个地方骑车

我需要教人们我经历过的 senerio 问题,并发出标题以修复互联网,避免我经历过的所有错误,并保护每个痴呆症的文件

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.