24/7 twenty-four seven

iOS/OS X application programing topics.

UIApplicationを継承して、いろいろなイベントを受け取る

UIApplicationを継承すると、アプリケーションで発生するいろいろなイベントが受け取れます。

継承した独自のUIApplicationクラスを使用するには、Other Sourcesにある、main.mを以下のように書き換えます。

int main(int argc, char *argv[]) {
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    int retVal = UIApplicationMain(argc, argv, @"MyApplication", @"MyAppDelegate");
    [pool release];
    return retVal;
}

UIApplicationMain関数の第3引数に、UIApplicationを継承したクラス名を指定します。
第4引数はUIApplicationDelegateクラスを指定します。

このクラスで、適切なメソッドをオーバーライドすると、各種のイベントの発生に対応できます。

例えばロック・スリープに移行するときには、以下のメソッドが呼ばれます。

- (void)applicationWillSuspend;

ロック・スリープになるタイミングで呼ばれるメソッドには、UIApplicationDelegateのapplicationWillResignActive:メソッドがありますが、このメソッドは、ホームボタンをダブルタップ(曲の再生中は iPodの操作パネルが表示される)でも呼ばれてしまうので、あまり使えないのです。

また、ステータスバーをタッチしたときには、以下のメソッドがそれぞれ呼ばれます。

- (void)statusBarMouseDown:(struct __GSEvent *)fp8;
- (void)statusBarMouseDragged:(struct __GSEvent *)fp8;
- (void)statusBarMouseUp:(struct __GSEvent *)fp8;

それ以外のメソッドについては下記等を参考にしてください。
http://ericasadun.com/iPhoneDocs220/_u_i_application_8h-source.html

調べてみるとボリュームが変化したときに呼ばれるメソッドなどもあり、面白いのですが、これらのメソッドはUndocumented APIとなりますので、審査に通らない可能性があります。