3

GIKAnimatedCalloutサンプル コードでは、ダブルタップ ジェスチャ、2 本指タップ ジェスチャ、ズーム ジェスチャ、およびピンチ ジェスチャはすべて、UITableView からその下の MKMapView に渡されます。私はこれが起こらないようにしたい。UITableView 内のタッチ イベントを MKMapView に渡してはなりません。

タップ用の UIGestureRecognizer を追加して空のメソッドにしようとしましたが、これらのタッチ イベントは UITableView だけでなく MKMapView にも送信されます。

デバッガーで UITableView のスーパービュー階層を見ると、UITableView が MKMapView の子孫であることがわかります。

この問題に他にどのようにアプローチすればよいか、私にはよくわかりません。任意のポインタをいただければ幸いです。

4

2 に答える 2

4

私が正しく理解していれば、UITableViewでジェスチャーが行われた場合にMKMapViewがまったく反応しないようにする必要があります(例では、myMKMapViewのmyTableViewプロパティが問題のUITableViewです)。もしそうなら、あなたは実装する必要があります

 - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch; 

MKMapView のサブクラスで (サブクラスがない場合はサブクラスを作成します。この例ではサブクラス myMKMapView を呼び出しました)。MKMapView のサブクラスである myMKMapView をUIGestureRecognizerDelegateプロトコルに準拠させることから始めます。MKMapView の .h ファイルで:

@interface myMKMapView : MKMapView <UIGestureRecognizerDelegate>

これが完了したら、myMKMapView の .m ファイルに移動し、次のように実装します。

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
    UIView *view = [self.view hitTest:[touch locationInView:self.view] withEvent:nil];

    if ([view isDescendantOfView:(self.myTableView)]) {
        return NO;
    }
    return YES;
}

これにより、myMKMapView は、その myTableView プロパティでジェスチャが実行された場合、myMKMapView がそれを無視する必要があることを伝えます。

于 2012-07-20T00:58:23.497 に答える