0

viewForZoomingInScrollView:UIScrollViewがあり、ユーザーがズームおよびパンできる UIImage を返すデリゲート メソッドを実装しています。また、Google マップのように、注釈として使用している UIScrollView のサブビューとしていくつかの UIButtons を持っています。

私が抱えている問題は、すぐにズームアウトすると、多くの UIImage が UIButtons によって隠される可能性があることです。ピンチしてズームしようとすると、代わりに UIButtons がタッチ イベントを受け取り、ズームが行われません。ズームするには、何もないスペースに指を慎重に置かなければなりません。

注釈ビューがたくさんある場合でも、Google マップ アプリは正常に動作しているように見えますが、ピンチすることもできます。

タッチを優先する必要があると思います.UIScrollViewはピンチとパンに応答する必要がありますが、ボタンはタップするだけです.

誰でもこれを経験したことがありますか?

4

4 に答える 4

1

私はこの正確な問題を抱えていましたが、それはちょっと奇妙でした。ボタンのジェスチャ認識機能によるものではなく、UIScrollView のピンチ ジェスチャ認識機能が何らかの理由で UIButton に転送されたことが原因でした。また、UIButton は特定の UIGestureRecognizerDelegate 呼び出し (-gestureRecognizerShouldBegin: など) には応答していましたが、他の呼び出し (-gestureRecognizer:shouldReceiveTouch: など) には応答していませんでした。UIScrollView が一部のデリゲート呼び出しを UIButton に選択的に転送し、一部を転送していないようです。

私は最終的にこの問題を解決するための非常に簡単な方法を見つけました:

yourScrollView.pinchGestureRecognizer.delaysTouchesBegan = YES;
yourScrollView.pinchGestureRecognizer.delaysTouchesEnded = YES;

幸いなことに、UIScrollView のデフォルトのピンチ ジェスチャ レコグナイザは公開されており、2 つの delaysTouches プロパティはデフォルトで NO です。それらを YES に設定すると、ジェスチャ レコグナイザーがピンチ ジェスチャを UIButton の上で開始する場合でも、ピンチ ジェスチャを認識できる場合、または認識した場合、それらのタッチは UIButton に転送されず、UIButtons は UIScrollView に干渉しなくなります。ズーミング。

于 2013-11-07T20:46:34.933 に答える
0

これを試して

 UIGestureRecognizer* tapRecognizer = nil;    
for (UIGestureRecognizer* recognizer in yourButton) {
    if ( ![recognizer isKindOfClass:[UITapGestureRecognizer class]] ) {
        [yourButton removeGestureRecognizer:recognizer];
        break;
    }
}

したがって、UITapGestureRecognizerとは異なるボタンからすべてのジェスチャレコグナイザーを削除します

于 2012-09-07T16:51:07.050 に答える
0

UIView のhitTest:withEvent: メソッドを見てください。そのメソッド内で、どのビューを返したいかを確認する必要があります。あなたが返すビューは、タッチを受け取るビューになります。たとえば、ボタンをサブクラス化し、そのメソッドをオーバーライドしてImageView、特定のシナリオの を返すことができます。

于 2012-09-07T17:12:02.640 に答える