3

UISCrollView コントロール (Xamarin.iOS モノ バインディングを使用する Google Maps iOS SDK) に埋め込まれたビューに Google MapView コントロールがあります。

問題は、コントロールがスワイプ ジェスチャを「飲み込まない」ことです。そのため、ユーザーがマップ上でスワイプすると、スワイプは含まれているスクロールビューによっても処理されます。これは本当の「ショー ストッパー」であり、MapView コントロールが使用できなくなります。

MapView からクラスを派生させ、メソッド GestureRecognizerShouldBegin と TouchesBegan をオーバーライドしようとしましたが、呼び出されませんでした。

Xamarin バインディングではなく、GMSMapView コントロール自体に関連する問題のようです: https://code.google.com/p/gmaps-api-issues/issues/detail?id=5311

UISCrollView が MapView コントロールで行われたジェスチャを受信/処理しないようにするにはどうすればよいですか?

4

4 に答える 4

1

現在の (1.3.0) バージョンの Google Maps SDK では、次の設定にアクセスできます。

self.mapView.settings.scrollGestures = NO;
self.mapView.settings.zoomGestures = NO;
self.mapView.settings.tiltGestures = NO;
于 2013-05-28T17:31:39.337 に答える
0

ここでイベントの伝播を回避する方法を見つけるかもしれません

お役に立てれば

アレックス

于 2013-04-30T15:07:40.837 に答える
0

これを回避するには、継続的なジェスチャのタッチを食べる UIGestureRecognizer サブクラスを作成し、そのジェスチャRecognizers プロパティを介して GMSMapView にその認識機能を追加します。

Google は SDK でジェスチャ レコグナイザーを使用していないため、現時点ではマップに干渉しませんが、将来のアップデートで変更される可能性があります。MonoTouch でカスタム認識機能を定義する方法はわかりませんが、可能のようです ( http://docs.xamarin.com/samples/Touch )。

このジェスチャ認識エンジンは、次のようなタッチ処理メソッドを実装する必要があります。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    self.state = UIGestureRecognizerStateBegan;
}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    self.state = UIGestureRecognizerStateChanged;
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    self.state = UIGestureRecognizerStateEnded;
}

- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
{
    self.state = UIGestureRecognizerStateCancelled;
}

これにより、MKMapKit のように、マップがその上にあるすべてのタッチを食べてしまい、それらを表示する階層のさらに上にあるスクロール ビューを停止します。残念ながら、C#/Xamarin.iOS に相当するコードがわかりません。これが役立つことを願っています。

于 2013-05-13T14:12:25.767 に答える