iOSのイベント処理ガイドによると、次の
3つのオプションがあります。
1)sendEventをオーバーライドするためのUIWindowのサブクラス化:
2)オーバーレイビューを使用する
3)それをする必要がないように設計する...本当に2つのオプションのようです。
これは、UIWindowサブクラスを使用したapplesの例の簡略化です。
1)NIBのウィンドウのクラスをUIWindowのサブクラスに変更します。2)このメソッドを.mファイルに入れます。
- (void)sendEvent:(UIEvent *)event
{
NSSet * allTouches = [event allTouches];
NSMutableSet *began = nil;
NSMutableSet *moved = nil;
NSMutableSet *ended = nil;
NSMutableSet *cancelled = nil;
// sort the touches by phase so we can handle them similarly to normal event dispatch
for(UITouch *touch in allTouches) {
switch ([touch phase]) {
case UITouchPhaseBegan:
if (!began) began = [NSMutableSet set];
[began addObject:touch];
break;
case UITouchPhaseMoved:
if (!moved) moved = [NSMutableSet set];
[moved addObject:touch];
break;
case UITouchPhaseEnded:
if (!ended) ended = [NSMutableSet set];
[ended addObject:touch];
break;
case UITouchPhaseCancelled:
if (!cancelled) cancelled = [NSMutableSet set];
[cancelled addObject:touch];
break;
default:
break;
}
// call our methods to handle the touches
if (began)
{
NSLog(@"the following touches began: %@", began);
};
if (moved)
{
NSLog(@"the following touches were moved: %@", moved);
};
if (ended)
{
NSLog(@"the following touches were ended: %@", ended);
};
if (cancelled)
{
NSLog(@"the following touches were cancelled: %@", cancelled);
};
}
[super sendEvent:event];
}
出力が多すぎますが、アイデアが浮かびます...そしてロジックを希望の場所に適合させることができます。