9

在我目前正在设计的应用程序中,我有一个MKMapView覆盖层(自定义MKPolylinesbtw),我希望能够检测这些覆盖层上的触摸事件并为每个覆盖层分配一个特定的操作。有人可以帮我解决这个问题吗?谢谢 !

本雅

4

2 回答 2

19

这可以结合如何拦截 MKMapView 或 UIWebView 对象上的触摸事件来解决?以及如何确定注释是否在 MKPolygonView (iOS)中。在 viewWillAppear 中添加:

WildcardGestureRecognizer * tapInterceptor = [[WildcardGestureRecognizer alloc] init];
tapInterceptor.touchesBeganCallback = ^(NSSet * touches, UIEvent * event) {
    UITouch *touch = [touches anyObject];
    CGPoint point = [touch locationInView:self.mapView];

    CLLocationCoordinate2D coord = [self.mapView convertPoint:point toCoordinateFromView:self.mapView];
    MKMapPoint mapPoint = MKMapPointForCoordinate(coord);
    for (id overlay in self.mapView.overlays) 
    {
        if ([overlay isKindOfClass:[MKPolygon class]])
        {
            MKPolygon *poly = (MKPolygon*) overlay;
            id view = [self.mapView viewForOverlay:poly];
            if ([view isKindOfClass:[MKPolygonView class]])
            {
                MKPolygonView *polyView = (MKPolygonView*) view;
                CGPoint polygonViewPoint = [polyView pointForMapPoint:mapPoint];
                BOOL mapCoordinateIsInPolygon = CGPathContainsPoint(polyView.path, NULL, polygonViewPoint, NO);   
                if (mapCoordinateIsInPolygon) {
                    debug(@"hit!") 
                } else {
                    debug(@"miss!");   
                }
            }
        }
    }

};
[self.mapView addGestureRecognizer:tapInterceptor];

WildcardGestureRecognizer在第一个链接的答案中。调用mapView:viewForOverlay:不会便宜,添加这些本地缓存会有所帮助。

于 2011-11-16T15:58:48.453 回答
0

以防万一它可能对你们中的一些人有所帮助...我找不到这样做的方法,但是我在叠加层上添加了注释(无论如何,我需要这样做以显示一些信息),然后我就可以触摸此注释上的事件。我知道这不是最好的方法,但在我的情况下,也许你的情况下,它有效;)!

于 2011-07-20T07:33:47.330 回答