9

私が現在設計しているアプリではMKMapView、オーバーレイを使用して(カスタマイズされていMKPolylinesます)、これらのオーバーレイのタッチイベントを検出し、各オーバーレイに特定のアクションを割り当てられるようにしたいと考えています。誰かがこれについて私を助けてくれますか?ありがとう !

ベンジャ

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 に答える