我正在尝试查看我所拥有的某些范围(max x,max y,min x,min 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
时,我的范围永远不会被包含。
如果我将mapView.visibleMapRect
替换为MKMapRectWorld
,那么它将包含我的范围'mapRect'。
我做错了吗?是mapView.visibleMapRect
不是我认为的(屏幕上的可视区域)?
答案 0 :(得分:1)
D'哦!
问题是我使用的是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]));
答案 1 :(得分:0)
mapView.visibleMapRect
正是您的想法,地图视图显示的地图矩形。问题可能是MKMapRectContainsRect
函数只告诉您一个map rect是否完全包含(完全封闭)在另一个中。您可能只想使用MKMapRectIntersectsRect
,它只是告诉您地图矩形的一部分位于mapView.visibleMapRect