[iPhone SDK] begin, endIgnoringInteractionEvents
beginIgnoringInteractionEventsとendIgnoringInteractionEventsメソッドは,アプリケーションへの操作をロックする.
とにかくユーザに操作をされると困るときはこのメソッドを使う.
[[UIApplication sharedInstance] beginIgnoringInteractionEvents];
こうすると,操作はロックされる.解除するには,
[[UIApplication sharedInstance] endIgnoringInteractionEvents];
でよい.
ただし,経験上操作のアンロックがうまくいかない問題が発生したので補足すると,
ユーザの操作→操作ロック→処理→操作アンロック→通常
という流れでプログラミングしていたときにendIgnoringInteractionEventsがうまく動かないことがあった.どうやらこれは,処理が短すぎたりすると,beginIgnoringInteractionEventsとendIgnoringInteractionEventsの間隔が短くなり,セマフォ?かなんかの排他処理がうまくいかなくなり,アンロックに失敗するように予想した.
そこで,ロックとアンロックの間が短い場合は,以下のようなコードを書くと安心.
これはアンロックされることを前提に書いているので,よりセキュア?なコードにするためにはタイムアウトをつけるとイイと思う.
#define TIME_TO_WAIT 0.05 ------- while( [[UIApplication sharedApplication] isIgnoringInteractionEvents] ) { [NSThread sleepForTimeInterval:TIME_TO_WAIT]; [[UIApplication sharedApplication] endIgnoringInteractionEvents]; }
・若干修正しました