gpt4 book ai didi

objective-c - 你如何测量 map 移动了多远?

转载 作者:行者123 更新时间:2023-11-29 13:48:27 26 4
gpt4 key购买 nike

在我的 mapView:regionDidChangeAnimated 方法中,我正在调用以查找 map 上的位置,但我只想在 map 移动了很多时调用。

这是场景:

  1. 用户移动 map 或加载 map
  2. 通过 HTTP 调用查找地点
  3. 向 map 添加地点。
  4. 问题!用户单击打开标题气泡的注释,它靠近边缘,因此它移动了 map 。由于数据加载与 map 移动事件相关联,因此标记消失并重新添加。

我应该如何观察跨度和中心点的变化?

@Scott 感谢 visibleMapRect 的想法。这是我目前所做的工作,它仍然需要考虑放大和缩小。

MKMapRect newRect = _mapView.visibleMapRect;
MKMapRect oldRect = currentRect;

float leftBoundry = (newRect.origin.x-(newRect.size.width/4));
float rightBoundry = (newRect.origin.x+(newRect.size.width/4));
float topBoundry = (newRect.origin.y-(newRect.size.height/4));
float bottomBoundry = (newRect.origin.y+(newRect.size.height/4));

NSLog(@"Origin x %f, y %f", oldRect.origin.x, oldRect.origin.y);
NSLog(@"Boundries left %f, top %f, right %f, bottom %f", leftBoundry, topBoundry, rightBoundry, bottomBoundry);

if (oldRect.origin.x < leftBoundry || oldRect.origin.x > rightBoundry || oldRect.origin.y < topBoundry || oldRect.origin.y > bottomBoundry) {
[self loadLocations];
currentRect = newRect;
}

最佳答案

嗯。听起来您正在通过删除所有注释来刷新 map ,然后(重新)显示属于 visibleMapRect 的所有注释 - 解决此问题可能需要更细致的方法来更新 map 。

一种方法可能是使用 MKMapRectIntersection 来识别“旧”和"new"visibleMapRect 之间的重叠,并且(如果有)排除注释在这个区域被删除或重新添加。或者,您可以计算在屏幕上滚动的 L 形区域,然后只对该区域内的数据进行 HTML 调用。

或者您可以只检查 map 的“旧”中心是否仍在 visibleMapRect 内,如果是,则武断地确定 map 没有移动太多。这可能会给您留下屏幕上应该有注释但实际上没有的区域。

或者,最后,您可以只存储用户选择的注释的坐标,如果 map 移动后该坐标仍在屏幕上,请找到它并重新选择注释。

关于objective-c - 你如何测量 map 移动了多远?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6158849/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com