2011-12-07 7 views
3

iPadアプリでは、ユーザーが画面に触れるたびに、タッチしているポイントを強調表示してイメージを表示します。アプリには多数のネストされたビューが含まれています。これらのビューのすべては接触して正常に動作するはずです。アプリ内のすべてのタッチを検出する

シンプルですが、私はそれを行う良い方法を見つけることに失敗しました。サブビューに触れるとイベントが発生しないため、touches began: with eventと関連する機能をルートビューコントローラで使用すると機能しません。また、画像を描画する別のクラスにタッチイベントを渡す「ダミー」ジェスチャ認識機能も作成しました。これはうまく動作し、ボタンは機能しますが、UIScrollViewsが破損し、ジェスチャの再設定機能で他のサブビューを推測しています。

はあなただけで、これらのタッチが向かっているに影響を与えることなく、すべてタッチイベントにアクセスすることができますどこにもありませんか?

ありがとうございました。

答えて

6

ダミーのジェスチャ認識機能は問題ありません。状態の設定に注意してください。可能 - >開始 - > ...

基本的に、ジェスチャ認識機能はすべてのタッチを転送しているため、タッチがある間は常に開始または可能な状態にすることができます。

他のジェスチャ認識機能で問題を取り除くには、このデリゲートメソッドでYESを返します。

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { 
    return YES; 
} 

その他のオプションは、すべてのイベントへのアクセス権を持っている必要があります。ここ

- (void)sendEvent:(UIEvent *)event 

をあなたのアプリケーションのメインUIWindowをサブクラス化し、このメソッドをオーバーライドすることです。フィルタリングは非常に簡単です。

3

ビュー全体にUITapGestureRecognizerを適用し、cancelsTouchesInViewプロパティをNOに設定することができます。これにより、すべてのタッチイベントを傍受せずに、ビューとそのサブビューのすべてのタップを通知することができます。

さらに、UIScrollViewのようなビューで使用されているジェスチャレコグナイザをスムーズにしないように、-gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:デリゲートメソッドを実装できます。

+0

これはうまくいく可能性があります。私はそれを試してみましょう! –

1

あなたはhitTest上書き試すことができます:withEvent:これは多分あなたが探しているもの

-(UIView*)hitTest:(CGPoint)point withEvent:(UIEvent *)event 

+0

hitTestメソッドを中断してもタッチは追跡されませんので、移動していないタッチや、近くにある2つのヒットが同じタッチであれば、余分なロジックを追加する必要があります。 –

関連する問題