iOS开发_无侵入埋点之从UIApplicationMain函数的参数入手

#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]));
    }
}
posted @ 2025-04-25 23:11  CH520  阅读(36)  评论(0)    收藏  举报