同時に1つ以上のuiviewでタッチイベントを受信します
-
14-10-2019 - |
質問
たくさんあります UIViews
一方を互いに積み重ねた(ネストされていない)。私はそれらすべてがタッチのために反応することを望んでいますが、最も一番上のビューはその下のビューを曖昧にし、タッチイベントを受け取らないようにしているようです。
最初は、一番上のビューですべてのタッチイベントをキャッチしてから手動で呼び出すと思いました
hitTest
, 、 また pointInside
すべての根底にあるビューの方法ですが、どちらの方法も何らかの形でプライベートであることがわかりました(それは可能性が?) アクセスできません。
それを引き出す方法はありますか?
解決
タッチが一番上のビュー用であるかどうかを確認できます。そうでない場合は、スーパービューの同じ方法を呼び出すことができます。 [self.superview samemethod:sameparameter]のようなもの。
あなたの一番上のビューには方法があります
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
その方法の中で、あなたはあなたの論理を正しくしていますか?メソッド内で、受信したタッチがあなたの一番上のビューにあるかどうかを確認できません
UITouch *touch = [touches anyObject];
[touch locationInView:self];
そして、もしあなたがそれを監督の同じ方法に渡さないなら
[self.superview touchesEnded:touches withEvent:event];
他のヒント
タッチは単一のビューに送信されます。そのビューは、オプションでレスポンダーチェーンを渡すことができます。ビューのコレクションへのタッチを処理したい場合は、次のレスポンダーにそれらのイベントを転送し、すべての人の共通の親(またはコントローラーがレスポンダーチェーンの一部であるため)の共通の親を持つ必要があります。タッチ。
https://developer.apple.com/library/mac/documentation/general/devpedia-cocoaapp-mosx/responder.html