在我的mapView:regionDidChangeAnimated方法中,我正在调用以在地图上查找地点,但我只想在地图移动了很多的情况下拨打电话。
这是一个场景:
我应该如何观察变化的跨度和中心点?
@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;
}
答案 0 :(得分:1)
嗯。听起来您通过删除所有注释来刷新地图,然后(重新)显示visibleMapRect
内的所有注释 - 并且解决此问题可能需要更细微的方法来更新地图。 / p>
一种方法可能是使用MKMapRectIntersection
来识别“旧”和“新”visibleMapRect
之间的重叠,并且(如果有的话)排除此区域中的注释被删除或重新添加。或者,您可以计算在屏幕上滚动的L形区域,并仅对该区域内的数据进行HTML调用。
或者您可以检查地图的“旧”中心是否仍然在visibleMapRect
内,如果是这样,则任意判断地图是否移动了很多。这可能会让你在屏幕上显示应该有注释的区域但是没有。
或者,最后,您可以只存储用户选择的注释的坐标,如果地图移动后该坐标仍然在屏幕上,找到它并重新选择注释。