たとえば、4つのサブビューがあり、互いに隣り合っていても重複していないビューを想像してみてください。 全5つのこうした見解は、私自身のUIViewのサブクラス(はい、私が読んだ:Event HandlingなどiOS Event GuideこのSO questionと、このoneを、まだ答えていない)されているビュー#4UITouch&UIEvents:フレームワークとの戦闘?
...のは、#1を表示して呼ぶことにしましょう
ユーザーはそれらの一つに触れ、UIKitの「hiTests」それとそのビューに、後続のイベントを配信:ビュー#1
指が外のビュー#1になっても、オーバービュー#3を言います。
この「ドラッグ」がビュー#3を超えていても、ビュー#1は引き続きtouchesMovedを受け取りますが、ビュー#3は何も受信しません。
ビュー#3がタッチに返信を開始します。たぶん私の "touchedEntered"と一緒に、おそらく#1の "touchesExited"と一緒に。
どうすればいいですか?
私は2つのアプローチを見ることができます。私は、ビュー#の外に1境界か、に「再ディスパッチ」それを伝える親ビューへ
- サイドステップの問題とは、親 ビューで取り扱うすべてのタッチを行います。しかし、そのような再ディスパッチがどのように機能するのかは明らかではありません。 私は混乱しています解決策#2の
は、転送自体についてが、どのように私はに転送したいのUIViewを見つけることではありません。私は明らかに親のサブビューをループすることができますが、その境界/フレームにはタッチが含まれていますが、Appleが既に提供していたことがあるのか不思議です。
touchCancelledイベントを結果として得るために、私はtouch-drag-outsideのときにUIApplication.beginIgnoringInteractionEventsを使用していると考えていました。次に、UIApplication.endIgnoringInteractionEventsを呼び出して、新しいビューの上にtouchedBeganが表示されることを期待しています。私はコードのその部分に戻るときにこれを試してみましょう:) – verec
フレームワークで作業するよりも、フレームワークで作業する方が一般的に優れています。タッチを中止しようとすると、おそらく役に立つよりも面倒になるでしょう。 – Caleb
一般的に私は同意する傾向がありますが、私はiOSがすでに私のために正しく行っていることを自分自身で複製することに熱心ではありません。 「親は子どものタッチを処理する」というソリューションは、私が一組のタッチで終了することを意味します.Began ... touches親では、myTouchBeganの独自のバリアントを合成する必要があります... myTouchCancelled:MyUITouchなど...子どもたち。代わりに、ある種の形状/パス/画像以外のビューを使用せず、全体を1つのモノリシックな方法で処理することです。これはちょっと臭いものです... – verec