web-dev-qa-db-ja.com

UIGestureRecognizerはタッチを受け取りますが、UIControlにも転送します

UIGestureRecognizerUIViewがタッチイベントを受信できるようにするだけでなく、別のアンダーレイ/オーバーレイUIViewも同じタッチイベントを受信するようにするにはどうすればよいですか。

私が次のビューを持っているとしましょう-hierachie: view hierachie scribble

ビューA(青)とビューB(赤)は両方とも同じスーパービュー(灰色)のサブビューです。言い換えれば、彼らは両方とも兄弟であり、順序はそれらのどちらが他方をカバーするかを決定します。

オプション1:ビューB(赤)には、サブビューとして通常のUIButtonがあります。オプション2:ビューA(青)には、サブビューとして通常のUIButtonがあります。

説明のためにオプション1を指定します。ビューA(青)にはUITapGestureRecognizer(またはそれ以上の他のUIGestureRecognizers)が添付されています。 UIButtonがその領域ですべてのタッチを受信するだけでなく、ビューA(青)がそのUITapGestureRecognizerでそれらのタッチを受信することを確認するための、最もエレガントなアプローチは何でしょうか。

何らかの方法で可能であれば、ソリューションはUIButtonクラスを拡張し、ボタン自体からイベントを手動で転送することを含まないようにする必要があります。ビューBには、ボタンだけでなく、さらに多くのコントロールが含まれていると想像してください。これらのコントロールはすべて、ビューAがUIGestureRecognizerのタッチを受信できるようにする必要があります。

両方がタッチを受け取る限り、これらのビュー(AまたはB)のどちらが最初に来るかは気にしないので、2つのオプションを提供しました。

これまでの私のアプローチはすべて突然行き止まりになりました。たぶん、カスタムレスポンダーチェーンは素晴らしい解決策になるでしょうか? UIKit/UIEvent/UIResponderスタック全体に洗練されたソリューションが必要だと私は考え続けています。

35
Till

this で試しましたか?

cancelsTouchesInViewジェスチャが認識されたときにタッチがビューに配信されるかどうかに影響を与えるブール値。

@property(nonatomic) BOOL cancelsTouchesInView
19
sergio