根据iOS 的事件处理指南,
您有 3 个选项:
1) 继承 UIWindow 以覆盖 sendEvent:
2) 使用覆盖视图
3)设计,这样你就不必这样做......所以真的更像是2个选项。
这是一个简化的苹果示例,使用 UIWindow 子类;
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];
}
它有太多的输出,但你会明白的......并且可以使你的逻辑适合你想要的地方。