2012-02-07 4 views
1

たとえば、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境界か、に「再ディスパッチ」それを伝える親ビューへ

  • 転送をtouchesMovedを検出するたび

    1. サイドステップの問題とは、親 ビューで取り扱うすべてのタッチを行います。しかし、そのような再ディスパッチがどのように機能するのかは明らかではありません。 私は混乱しています解決策#2の

    は、転送自体についてが、どのように私はに転送したいのUIViewを見つけることではありません。私は明らかに親のサブビューをループすることができますが、その境界/フレームにはタッチが含まれていますが、Appleが既に提供していたことがあるのか​​不思議です。

  • 答えて

    1

    私はこれを行いましたが、サブUIViewではなくCALayersを使用しました。そうすれば、サブビューが親UIViewにイベントをキャッチ/再ディスパッチすることについての心配はありません。あなたはそれをすることができないかもしれませんが、事を単純化します。私の解決策は多くの場合CGRectContainsPoint()を使用する傾向がありました。

    1

    それはanswering your questionにかなり近づくとあなたは、再びの取り扱いイベントを読むことをお勧めします:

    タッチオブジェクト...場合でも、その 寿命のためにそのヒットテストビューに関連付けられていますその後オブジェクトによって表される接触は ビューの外側に移動します。

    あなたが異なるビューを持つことを目標に達成したい場合は、ユーザーの指がその上を横切って反応し、UIViewで提供されるタッチハンドリングの仕組みの中でそれを実行する場合は、あなたの最初のアプローチ:親のビューにタッチを処理させる。親は-hitTest:withEvent:または-pointInside:withEvent:を使用してタッチを追跡しているため、タッチがサブビューの1つに含まれているかどうかを判断し、適切なメッセージを送信できます。

    +0

    touchCancelledイベントを結果として得るために、私はtouch-drag-outsideのときにUIApplication.beginIgnoringInteractionEventsを使用していると考えていました。次に、UIApplication.endIgnoringInteractionEventsを呼び出して、新しいビューの上にtouchedBeganが表示されることを期待しています。私はコードのその部分に戻るときにこれを試してみましょう:) – verec

    +0

    フレームワークで作業するよりも、フレームワークで作業する方が一般的に優れています。タッチを中止しようとすると、おそらく役に立つよりも面倒になるでしょう。 – Caleb

    +0

    一般的に私は同意する傾向がありますが、私はiOSがすでに私のために正しく行っていることを自分自身で複製することに熱心ではありません。 「親は子どものタッチを処理する」というソリューションは、私が一組のタッチで終了することを意味します.Began ... touches親では、myTouchBeganの独自のバリアントを合成する必要があります... myTouchCancelled:MyUITouchなど...子どもたち。代わりに、ある種の形状/パス/画像以外のビューを使用せず、全体を1つのモノリシックな方法で処理することです。これはちょっと臭いものです... – verec

    関連する問題