4

Google GMSMapView に UIView を重ねようとしています。目標は、マップがいつ手動で移動されているかを知るためにスワイプを傍受することです。( -mapView:willMove: を確認できることはわかっていますが、マップがプログラムによって移動しているか、手動でタッチした結果として移動しているかに関係なく、呼び出されます)。位置が更新されると、プログラムでマップの中心を再調整しています。Google は Apple のようにユーザーに代わってそれを行うわけではないからです。そこにあるすべてのマッププログラムと同様に、ユーザーが手動でマップを移動するとすぐに、現在の位置の中心を停止したいと考えています。その発生をキャプチャするために私が考えることができる唯一の方法 (mapkit に切り替えるか、Google が API に追加するのを待つ以外) は、マップ上に配置されたビューを通過するときにスワイプをキャプチャすることです。

明確にするために、私の質問は、Google マップ上にビューを配置し、スワイプに応答させ、そのイベントが GMSMapView に渡されるようにする方法です。

私のマップとinterceptViewは両方とも、メインビューの兄弟の子です。InterceptView には、gestureRecognizer があり、非表示ではなく不透明に設定されており、userInteractionEnabled = YES です。そのため、interceptView はタッチ イベントを適切に取得します。しかし、下の地図は動かない。InterceptView.userInteractionEnabled = NO を設定すると、マップは正常に機能します。

touchesBegan をオーバーライドして GMSMapView の touchesBegan を呼び出すことによる「タッチの受け渡し」は、何もしません。また、GMSMapView をサブクラス化できないため、hitTest をオーバーライドするオプションはないようです。誰かがこれをしましたか?特定のイベントを通過させることについて、ここには多くのことがあると思います。2 つのビューで特定のイベントを処理したいと考えています。そのうちの 1 つは、コードを変更できない Google のマップ レイヤーです。

4

3 に答える 3

1

ここにデリゲートメソッドがありますチェックしてください

- (void)mapView:(GMSMapView *)mapView didTapAtCoordinate:(CLLocationCoordinate2D)coordinate;
于 2015-07-13T12:19:37.780 に答える
0

GMSMapViewDelegete を使用してタップをインターセプトし、このメソッドを実装できます。

-(void)panoramaView:(GMSPanoramaView *)panoramaView didTap:(CGPoint)point;

例:

-(void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
    CLLocationCoordinate2D panoramaNear = {latitudine,longitudine};
    GMSPanoramaView *panoView = [GMSPanoramaView panoramaWithFrame:CGRectZero
                                    nearCoordinate:panoramaNear];
    [panoView setDelegate:self];
    self.view = panoView;
}
-(void)panoramaView:(GMSPanoramaView *)panoramaView didTap:(CGPoint)point{
NSLog(@"Tap");
}
于 2014-03-15T14:44:13.897 に答える