0

私は MapView を持っています。その上に UIView (0、216、320、200) を追加しました。これには 10 個の UIButton が含まれています。この UIView はメニューのように機能し、特定のボタン アクションで表示と非表示を切り替えます。

ここでの問題は、メニューが表示されているときに、ボタンを1回タップすると完全に機能しますが、非常にすばやく複数回タップすると、MapViewがズームします(ボタンを含むUIViewの下にあります)。これは、タッチ イベントが MapView に渡されていることを意味します。

詳細: ボタンをすばやくタップすると MapView Zoom が発生し、タップを止めるとボタン アクションが実行されます。

どうすればそれを防ぐことができますか?

4

2 に答える 2

1

あなたができることは、ボタンのハンドラーの間、ユーザーの操作を無効にすることです。したがって、セレクターで次のようにします。

-(void)buttonSelector:(id)sender {
    _mapView.userInteractionEnabled = NO;

    // ... do what your button needs to do

    _mapView.view.userInteractionEnabled = YES;
}

もちろん、これはボタンがマップビューの前にイベントを取得することを前提としています...マップビューの上にあるため、そうすべきだと思います。

素早いタップを処理するには、UIButton のサブクラスを作成し、次のコードを使用します。

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    _mapView.userInteractionEnabled = NO;
}

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 
{
    _mapView.userInteractionEnabled = YES;
}

ビルダーで、UIButton のクラスをサブクラスに変更します。メソッドに渡されたセットでタッチをデバッグtouchesEndし、tapCount を見ると、すべてのタップがここで捕捉されていることがわかります。

于 2012-06-18T08:22:19.517 に答える
0

はい、問題は、UIView を MapView のサブビューとして追加していたことです。UIView を self.view のサブビューとして追加することで修正しました

于 2012-06-18T11:37:28.733 に答える