3

我正在制作一张有 5000 多个图钉的地图。每次我更改区域时,我都会根据缩放程度添加或删除 annotationViews。

唯一的问题是这个(极端测试):

标注被活着吃掉

当引脚之间没有更多空间时,标注会移动到顶部,但通常红色引脚在顶部。
我只使用基本的 MKPinAnnotationView。没有自定义标注。我确实尝试通过MKAnnotationViews 的 Aaron Z-ordering实现 Z-ordering-category,但似乎没有帮助。

编辑:

我还没有解决它,但我确实有一些想法。

MapKit 写得不好。MapView 有责任对视图进行排序,因此至少选定的视图保持在顶部。

也许 mapView 需要处理的注释太多了。

如何复制

只需添加 5000 个注释。

-(void)addAnnotations
{
   NSMutableArray *annotations = [NSMutableArray array];

   for(int i=0;i<5000;i++) {
       CGFloat latDelta = rand()*0.125/RAND_MAX - 0.02;
       CGFloat lonDelta = rand()*0.130/RAND_MAX - 0.08;

       CGFloat lat = 59.189358;
       CGFloat lng = 18.267839;

       CLLocationCoordinate2D newCoord = {lat+latDelta, lng+lonDelta};

       DTSAnnotation *annotation = [DTSAnnotation annotationWithCoord:newCoord];

       [annotation setTitle:@"."];

       [annotations addObject:annotation];
   }
   [[self mapView]addAnnotations:annotations];
}
4

1 回答 1

3

您可以通过在 didSelect 和 didDselect 地图视图委托方法中设置视图的 zPosition 来解决此问题:

public func mapView(mapView: MKMapView!, didSelectAnnotationView view: MKAnnotationView!)
    {
        view.layer.zPosition = 0
    }

    public func mapView(mapView: MKMapView!, didDeselectAnnotationView view: MKAnnotationView!)
    {
        view.layer.zPosition = -1
    }
于 2015-07-17T16:24:04.933 回答