Wykrywanie dotknięć w MKOverlay w iOS7 (MKOverlayRenderer)

Mam MKMapView z prawdopodobnie setkami wielokątów narysowanych. Używanie MKPolygon i MKPolygonRenderer jako jednego jest przypuszczalne w systemie iOS7.

Potrzebuję sposobu działania na użytkownika dotykającego jednego z wielokątów. Reprezentują obszar na mapie o określonej gęstości zaludnienia, na przykład. W systemie iOS6 MKOverlays zostały narysowane jako MKOverlayView, więc wykrywanie dotyku było prostsze. Teraz, używając rendererów, nie widzę, jak to ma być zrobione.

Nie jestem pewien, czy to pomoże lub jest nawet istotne, ale jako odniesienie opublikuję kod:

Dodaje to wszystkie MKOverlays do MKMapView za pomocą mapData.

-(void)drawPolygons{
    self.polygonsInfo = [NSMutableDictionary dictionary];
    NSArray *polygons = [self.mapData valueForKeyPath:@"polygons"];

    for(NSDictionary *polygonInfo in polygons){
        NSArray *polygonPoints = [polygonInfo objectForKey:@"boundary"];
        int numberOfPoints = [polygonPoints count];

        CLLocationCoordinate2D *coordinates = malloc(numberOfPoints * sizeof(CLLocationCoordinate2D));
        for (int i = 0; i < numberOfPoints; i++){
            NSDictionary *pointInfo = [polygonPoints objectAtIndex:i];

            CLLocationCoordinate2D point;
            point.latitude = [[pointInfo objectForKey:@"lat"] floatValue];
            point.longitude = [[pointInfo objectForKey:@"long"] floatValue];

            coordinates[i] = point;
        }

        MKPolygon *polygon = [MKPolygon polygonWithCoordinates:coordinates count:numberOfPoints];
        polygon.title = [polygonInfo objectForKey:@"name"];
        free(coordinates);
        [self.mapView addOverlay:polygon];
        [self.polygonsInfo setObject:polygonInfo forKey:polygon.title]; // Saving this element information, indexed by title, for later use on mapview delegate method
    }
}

Następnie istnieje metoda delegowania zwrotu MKOverlayRenderer dla każdego MKOverlay:

-(MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id<MKOverlay>)overlay{
    /* ... */

    MKPolygon *polygon = (MKPolygon*) overlay;
    NSDictionary *polygonInfo = [self.polygonsInfo objectForKey:polygon.title]; // Retrieving element info by element title
    NSDictionary *colorInfo = [polygonInfo objectForKey:@"color"];

    MKPolygonRenderer *polygonRenderer = [[MKPolygonRenderer alloc] initWithPolygon:polygon];

    polygonRenderer.fillColor = [UIColor colorWithRed:[[colorInfo objectForKey:@"red"] floatValue]
                                               green:[[colorInfo objectForKey:@"green"] floatValue]
                                                blue:[[colorInfo objectForKey:@"blue"] floatValue]
                                               alpha:[[polygonInfo objectForKey:@"opacity"] floatValue]];

    return polygonRenderer;

    /* ... */
}

questionAnswers(7)

yourAnswerToTheQuestion