比较CGRectIntersectsRect的两个数组值

时间:2016-01-21 16:01:10

标签: ios objective-c nsarray

地图上有注释(视觉标签)。当用户在地图中缩放(放大或缩小)时,将调用名为“regionDidChangeAnimated”的方法。每次完成此操作后,我尝试使用快速枚举来查看哪些注释对象当前与地图上的哪些注释对象相交。这是因为我使用的是YandexMapKit(不是Apple标准的MapKit),并且没有太多关于如何做到这一点的文档或示例。这是我到目前为止唯一可以提出的代码,但它最终导致应用程序崩溃:

NSArray *allAnnotations = [_mapView annotations];

// Check for intersecting annotation bounds.
for (RBMapAnnotation *annotation1 in allAnnotations)
{
    YMKPinAnnotationView *pinView1 = (YMKPinAnnotationView *)annotation1; // Still returns as 'RBMapAnnotation'.

    for (RBMapAnnotation *annotation2 in allAnnotations)
    {
        YMKPinAnnotationView *pinView2 = (YMKPinAnnotationView *)annotation2;

        if (CGRectIntersectsRect([pinView1 convertRect:pinView1.bounds toView:nil], [pinView2 convertRect:pinView2.bounds toView:nil]))
        {
            NSLog(@"Interesction between %@ and %@", annotation1.offer.name, annotation2.offer.name);

            //[annotationsToUpdate addObject:annotation];
        }

    }
}

请帮我解决这个问题。我想要获得的是,如果任何注释在视觉上在地图上相交,那么我将删除它们并用1个注释替换它们。

1 个答案:

答案 0 :(得分:1)

忽略算法效率低下(你可能想重做这个,所以它不是O(N ^ 2))......

您提到代码崩溃,但没有提供任何诊断/回溯来帮助诊断崩溃。

您正在循环注释,将它们转换为YMKPinAnnotationView,并将它们视为这样。这可能是您崩溃的根源。看起来注释是符合YMKAnnotation但实际上不是视图的实例。您应该发送传递注释的地图视图-viewForAnnotation:以获取关联的视图。