我正在尝试查看我的某些范围(最大x、最大y、最小x、最小y坐标)是否在当前可见地图视图中。
我获取扩展并创建MKMapRect
:
MKMapPoint upperLeft = MKMapPointForCoordinate(CLLocationCoordinate2DMake([boundary.extents.maxY floatValue], [boundary.extents.minY floatValue]));
MKMapPoint lowerLeft = MKMapPointForCoordinate(CLLocationCoordinate2DMake([boundary.extents.minY floatValue], [boundary.extents.minY floatValue]));
MKMapPoint upperRight = MKMapPointForCoordinate(CLLocationCoordinate2DMake([boundary.extents.maxY floatValue], [boundary.extents.maxY floatValue]));
MKMapRect mapRect = MKMapRectMake(upperLeft.x, upperLeft.y, fabs(upperLeft.x - upperRight.x), fabs(upperLeft.y - lowerLeft.y));
现在我想检查我的"mapRect"是否在mapView.visibleMapRect:中
if (MKMapRectContainsRect(mapView.visibleMapRect, mapRect)) {
// do some stuff
}
但当我知道mapView.visibleMapRect
应该包含我的区段时,它们从未包含过。
如果我用MKMapRectWorld
替换mapView.visibleMapRect
,那么它将包含我的扩展数据块"mapRect"。
我做错什么了吗?mapView.visibleMapRect
不是我认为的(屏幕上的可视区域)吗?
D'oh!
问题是我使用了minY而不是minX。
MKMapPoint upperLeft = MKMapPointForCoordinate(CLLocationCoordinate2DMake([boundary.extents.maxY floatValue], [boundary.extents.**minX** floatValue]));
MKMapPoint lowerLeft = MKMapPointForCoordinate(CLLocationCoordinate2DMake([boundary.extents.minY floatValue], [boundary.extents.**minX** floatValue]));
MKMapPoint upperRight = MKMapPointForCoordinate(CLLocationCoordinate2DMake([boundary.extents.maxY floatValue], [boundary.extents.**maxX** floatValue]));
mapView.visibleMapRect
正是您所认为的,即地图视图显示的地图矩形。问题可能是MKMapRectContainsRect
函数只告诉您一个映射矩形是否完全包含(完全封闭)在另一个映射中。很可能您只想使用MKMapRectIntersectsRect
,它只是告诉您的地图矩形的一部分在mapView.visibleMapRect
内部