我想在MKMap中使用群集,但不使用第三方框架。 为此,我从https://developer.apple.com/library/ios/samplecode/PhotoMap/Introduction/Intro.html下载代码 但我发现,当我随机旋转和缩放地图时,它会卡住。如果您有任何其他演示,请帮助我。
答案 0 :(得分:2)
我刚刚遇到了该示例代码中的问题。现有代码不适用于可以旋转的地图。
有两种情况会导致非常长或无限的循环。
如果将地图旋转180度,最终会出现mapView左侧的经度大于mapView右侧经度的情况。如果leftCoordinate
大于rightCoordinate
,则gridSize
变为否定。在while循环中,我们将地图rect的原点增加gridSize
,直到它大于endX
/ endY
。但如果gridSize
为负数,则原点实际上会变小,并且不会达到endX条件(没有算术下溢)。
如果你将地图旋转90度或270度,你将得到两个非常相似的经度,因此gridSize将非常小甚至为0,并且循环需要很长时间(或者如果是0永远)完成。
可以使用abs()
上的gridSize
修复第一个问题。第二个问题需要更改rightCoordinate
的计算,因此它使用点bucketSize, bucketSize
而不是bucketSize, 0
。完成后,我们将当前的gridSize
变量更改为gridSizeX
,并引入使用MapPoints的.y部分的gridSizeY
。
这是原始代码:
// PhotoMapViewController.m, line 199+
// determine how wide each bucket will be, as a MKMapRect square
CLLocationCoordinate2D leftCoordinate = [self.mapView convertPoint:CGPointZero toCoordinateFromView:self.view];
CLLocationCoordinate2D rightCoordinate = [self.mapView convertPoint:CGPointMake(bucketSize, 0) toCoordinateFromView:self.view];
double gridSize = MKMapPointForCoordinate(rightCoordinate).x - MKMapPointForCoordinate(leftCoordinate).x;
将替换为:
// determine how wide each bucket will be, as a MKMapRect square
CLLocationCoordinate2D leftCoordinate = [self.mapView convertPoint:CGPointZero toCoordinateFromView:self.view];
CLLocationCoordinate2D rightCoordinate = [self.mapView convertPoint:CGPointMake(bucketSize, bucketSize) toCoordinateFromView:self.view];
double gridSizeX = fabs(MKMapPointForCoordinate(rightCoordinate).x - MKMapPointForCoordinate(leftCoordinate).x);
double gridSizeY = fabs(MKMapPointForCoordinate(rightCoordinate).y - MKMapPointForCoordinate(leftCoordinate).y);
double gridSize = MAX(gridSizeX, gridSizeY);
答案 1 :(得分:0)