2012-02-29 8 views
2

一定の時間が経過しても非アクティブになっている場合は、自動的に非表示にしたいメニューがあります。このメニューは、さまざまなビューを表示するUIViewControllerの階層で構成されています。特定のビューで画面上の任意の場所にタッチイベントをキャッチしますか?

私はタイマーを実行する行に沿って考えています。タイマーは、タッチがあるたびに無効化して開始します。

UIViewのすべてのタッチイベントを捕捉することは可能ですか?おそらくブール値を保持し、メインのUIWindowを使用してタッチイベントを捕まえるだけでしょうか?

EDIT:

は私のアプリは、メイン画面とメニューで、種類のキオスクアプリです。メニューが立ち上がっているときは、メニュー画面全体にタッチした後にリセットする自動解除タイマーを実行します。メニューは、画面全体にモーダル表示されます。 UIApplicationをサブクラス化し、- (void)sendEvent:(UIEvent *)eventメソッドをオーバーライドすることを確認するために

+0

明確にするために、覚えておいてくれるメニューだけがタイマーや全体のビューをタッチしてリセットすることをお勧めしますか? – CodaFi

+0

モーダルで表示されるメニュー。 – Moshe

+0

ええええええええええええええええええええええええええええええええええええええ投稿者:しかし、それはポイントの横にある。メニューのすべてのUI要素について、あらゆるメソッドにウォッチャーを追加することは可能ですか?たぶん彼らは何かをシャドー*シングルトンに設定することができましたか? – CodaFi

答えて

1

一つの方法として、あなたのアプリケーションで起こってすべてのタッチイベントは、この方法を通過し、あなたはそれがUIEventTypeTouchesだかどうかを確認し、タイマーをリセットするためにUIEvent種類を確認することができます。

これを行うもう1つの方法は、単純にユーザーがアクセス可能なUI全体に透明なレイヤーを追加し、hitTest:withEvent:を上書きすることです。

+0

UIApplicationサブクラスはどのように使用できますか? – Moshe

+0

+1は 'hitTest:withEvent:' - イベントをキャッチし、それをサブビューに渡すことができます。このメソッドをルートビューに記述する必要があります。 – brigadir

0

あなたのモーダルの上に不可視のビューを持つことができ、コントローラを表示し、タイマー、どちらか

-touchesBegan:withTouches 

方法を開始し、その後に送信することができ、その上にジェスチャー認識のいずれかを持って置きます。 nextResponderも同じ方法です。

関連する問題