【问题标题】:Flickering MapOverlay after zoom out and zoom in-iOS缩小和放大后闪烁的MapOverlay-iOS
【发布时间】:2026-01-11 17:05:01
【问题描述】:

我有两个问题。首先,一旦我为坐标分配内存,请参阅下面的代码,我是否必须释放内存(坐标)?其次,正如您在下面的代码中看到的,我得到了覆盖并添加到地图上。但是,有不同的时间戳提供坐标,应该更新地图。就像雷达地图改变覆盖形状的不同时间戳一样。它最初更新得很好;但是,一旦用户缩小和放大,它就会开始闪烁或闪烁。我想知道为什么会发生这种闪烁?有人遇到过这个问题吗?

NSArray *ants = [mapView overlays];
for(bb = 0; bb < [polygonArray count]; bb++){
        int attr=[[idArray objectAtIndex:bb]floatValue];


        coords = malloc(sizeof(CLLocationCoordinate2D) * [[polygonArray objectAtIndex:bb] count]);
        for (int a = 0;a < [[polygonArray objectAtIndex:bb] count]; a++){
            coords[a].latitude = [[[[polygonArray objectAtIndex:bb]objectAtIndex:a]objectAtIndex:0]doubleValue];
            coords[a].longitude = [[[[polygonArray objectAtIndex:bb]objectAtIndex:a]objectAtIndex:1]doubleValue];
        }
        polygon = [[MKPolygon alloc]init];
        polygon = [MKPolygon polygonWithCoordinates:coords count:[[polygonArray objectAtIndex:bb]count]]; 
        //free(coords);
        [previousPolygons addObject:polygon];

            }
        [mapView addOverlay:polygon];
        }

    }
[mapView removeOverlays:ants];

【问题讨论】:

  • 是的,你需要释放你分配的内存,但你不应该在 SO 上两次问同一个问题或在一页上问两个问题,因为你可能会得到每个问题的答案,你只能将其中一项标记为正确。

标签: ios map ios6 mkmapview


【解决方案1】:

下载苹果

BreadCrumbs Demo

应用程序。
使用此演示,您会看到推荐的技术来完成您的任务。
我在我的应用程序中使用了那个 Demo,它就像一个魅力。

使用 MkPolygon 的方法不适用于大多边形或更改多边形。

【讨论】:

  • 我已经用 iphone 4s 测试了上面发布的代码它没有闪烁,一旦我用 iphone 5 测试它会因为处理器速度而闪烁。我不知道如何防止这种闪烁!你认为如果我实现 BreadCrumb 示例,我的问题就会消失吗?
  • 在 iphone 5 上试用面包屑演示,然后看看自己。我相信是的,在面包屑中使用该技术是个好主意
  • 啊,现在我明白了,使用 Mkpolygon 将无法正常工作,会闪烁!
  • 谢谢 Alex,那我应该用什么?
  • 还有,为什么 MKPolygon 会闪烁?
【解决方案2】:

我已经在 iOS 6.1 (iPad 3) 上测试了 BreadCrumbs Demo,它闪烁。这是新的 MKMapView 的错误(悲伤)。我已将该错误提交给 Apple。

【讨论】:

  • 我们也有这个问题。要检查我们是否有同样的问题:我们注意到在向 MKMapView 添加叠加时屏幕会闪烁(重绘),无论是添加 MKPolygon 还是我们自己的多边形叠加。我们还注意到,它只发生在具有视网膜显示屏的 iPad 上,并且在缩放级别 N.0001 到 N.5 之间(N.5 到 N.0 之间没有问题)。您在问题跟踪器上是否有指向您问题的链接,以便我们 +1?
  • 在我们的例子中,iOS 5.1 和 6.1 都会发生这种情况。
  • 我也遇到了同样的问题 - 闪烁从某个缩放级别开始,在此之前 - 没问题。在运行 iOS 8.3 的 iPhone6 上我没有问题,在运行 iOS 8.3 的 iPad Mini 1 上它会闪烁。有人找到解决方案了吗?
最近更新 更多