2011-12-25 8 views

答えて

3

透明なUIViewを画面全体に置き、すべてのタッチイベントをインターセプトします。

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event 
{ 
    return YES; 
} 
を:通常、そのメソッドの内部で、あなたがそれにスーパーを呼び出すと思いますが、この場合には、あなただけのYES戻ってくるだけでのUIViewのサブクラスを作成し、

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event;

をオーバーライドし、タッチイベントをインターセプトする

あなたが本当に気に入っているのであれば、shouldInterceptTouchesというUIViewサブクラスに合成プロパティを追加して、次のようにします:

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event 
{ 
    return shouldInterceptTouches ? YES : [super pointInside:point withEvent:event]; 
} 

透明なビューが他のビューよりも上にあるように注意してください。

サイドノート:Appleのヒューマンインタフェースガイドラインは、そういったことをしているときには好きではありません。あなたのアプリが反応しない場合、ユーザーは混乱し、失望し、アプリがフリーズしていると思えば、アプリを終了させる可能性があります。何らかのUIActivityIndi​​catorViewを表示し、絶対に必要なボタンだけを無効にする方が良いでしょう。 Appleはあなたがそのようなことをバックグラウンドで行い、ユーザーが他のことをやり遂げることができるようにしたら、それが好きです。

+0

これは非常に良い解決策のようです。すべてのタッチイベントを傍受する方法 - exclusiveTouch(YES)とsetUserInteractionEnabled(NO)は十分に良いでしょうか?私は2つの設定を使用しましたが、透明なビューでスワイプで以下のビューが動きます。 – tom

+0

詳細を追加するために投稿を編集しました。 –

+0

ありがとう@ジャック!今私の意見が他の意見よりも上にあることを確認する方法が問題になります。 addSubViewはそれを保証しないでしょうか? – tom

-1

ロケーションサービスが終了するまでモーダルビューを使用するか、すべてのコンポーネントを無効にすることができます。

これは、OSまたはフレームワークではなく、アプリケーションの責任です。

関連する問題