ios - iPhone MKMapView 中的注释聚类

标签 ios objective-c iphone mkmapview

我想在 MKMap 中使用集群,但不想使用第 3 方框架。 为此,我从 https://developer.apple.com/library/ios/samplecode/PhotoMap/Introduction/Intro.html 下载代码 但我发现当我随机旋转和缩放 map 时它卡住了。如果您还有其他演示,请帮助我。

最佳答案

我刚刚也遇到了那个示例代码中的问题。现有代码不适用于可旋转的 map 。

有两种情况会导致非常长的循环或无限循环。

  1. 如果将 map 旋转 180 度,最终会出现 mapView 左侧的经度大于 mapView 右侧的经度的情况。如果 leftCoordinate 大于 rightCoordinate,则 gridSize 变为负数。在 while 循环中,我们将 map 矩形的原点增加 gridSize,直到它大于 endX/endY。但如果 gridSize 为负数,原点实际上会变小,并且不会达到 endX 条件(没有算术下溢)。

  2. 如果将 map 旋转 90 度或 270 度,最终会得到非常相似的两个经度,因此 gridSize 会非常小甚至为 0,并且循环需要很长时间(或者在0 永远)完成。

第一个问题可以通过在 gridSize 上使用 abs() 来解决。第二个问题需要改变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);

关于ios - iPhone MKMapView 中的注释聚类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28957431/

相关文章:

iphone - 从越狱的iPhone上的控制台打开wifi/蓝牙/网络共享

iphone - 如何将 AdMob 广告添加到 UITableView

objective-c - 类组合在 iOS 中是如何工作的?

ios - 在动画 block 中调用时,UIView 动画无法无限重复

ios - 卸载应用程序时如何在iOS8上获取设备 token

ios - 来回更改 UIImages

ios - iTunes Connect 和应用程序加载器 "You Must Define An Input Directory"

ios - Storyboard很慢

objective-c - 如何显示基于 UIWindow 的暗色背景,如 UIAlertView?

iphone - 如何在 iOS 中处理 1 到 3 个手指滑动手势