#import <UIKit/UIKit.h>
#import "GC_AppDelegate.h"
@interface GC_Application : UIApplication
@end
@implementation GC_Application
/**
* @brief 将事件发送到应用程序的事件队列
*
* @discussion 该方法通常由系统自动调用, 用于将用户发出的事件加入到待处理的队列
*
* @param event 要发送的事件
*/
- (void)sendEvent:(UIEvent *)event {
// 在这里处理一些统一的逻辑
NSSet <UITouch *> *allTouches = event.allTouches;
NSEnumerator *erator = [allTouches objectEnumerator];
UITouch *touch;
while (touch = [erator nextObject]) {
UIView *uiview = touch.view;
// 拦截指定目标禁止点击
if ([uiview isKindOfClass:[BC_Label class]]) {
return;
}
}
[super sendEvent:event];
}
/**
* @brief 将指定的动作发送到目标对象, 触发响应方法
*
* @discussion 该方法通常由系统自动调用, 用于将用户发出的动作发送到目标对象上, 执行相应的响应方法
*
* @param action 要执行的动作
* @param target 动作的目标对象
* @param sender 动作的发起者
* @param event 触发动作的事件。如果是nil, 该方法会从UIApplication的事件队列中获取相关的事件
*
* @return 如果目标对象成功响应该动作返回YES, 否则返回NO
*/
- (BOOL)sendAction:(SEL)action to:(nullable id)target from:(nullable id)sender forEvent:(nullable UIEvent *)event {
// 拦截指定目标,添加指定自定义操作
if ([sender isKindOfClass:[UIButton class]]) {
// here, play sound
}
return [super sendAction:action to:target from:sender forEvent:event];
}
@end
int main(int argc, char *argv[]) {
@autoreleasepool {
return UIApplicationMain(argc, argv, NSStringFromClass([GC_Application class]), NSStringFromClass([GC_AppDelegate class]));
}
}